使用dapr .net Client SDK 踩过的坑(持续更新)

1、服务调用 Service invocation

InvokeMethodAsync方法,如果带请求参数,那么请求参数的泛型必须是对象,如   (stateKeyName为字符串)

 var data = await _daprClient.InvokeMethodAsync<object, ProductModel>("productservice", "Product/GetState", stateKeyName, cts.Token);   //服务调用成功,参数正常传过去了

 var data = await _daprClient.InvokeMethodAsync<string, ProductModel>("productservice", "Product/GetState", stateKeyName, cts.Token);   //服务调用成功,参数没传过去

对应的服务端,接受的参数也必须是object类型,string类型就获取不到参数。

(不一定正确,有待进一步验证,可以看看dapr .NET SDK的源码,附搬到码云的地址  https://gitee.com/arthaslcm/dotnet-sdk)

2、发布订阅

发布:

 

 订阅:

 

 如果订阅服务的参数类型直接放发布端传过来的数据类型是不行的,看了源码发现发布的时候数据封装在了一个CloudEvents中,所以接受参数的时候需要先解析json字符串取出来。。

上图中订阅端的参数类型可以为object,发布端传的参数放在object.data里,需要自己解析出来。(找到原因了,往下看)

而源码中订阅的例子中是这样的,照着弄了半天才发现根本行不通啊。。

 

又回去看源码了,才发现还要在Startup文件处注册一个中间件,用来解包请求,好嘛。。。我真是太菜了

dapr文档的说明:

禁用CloudEvents包装数据的方法:

https://docs.dapr.io/zh-hans/developing-applications/building-blocks/pubsub/pubsub-raw/

 

posted @ 2021-06-16 11:37  老铁你咋这么肥  阅读(487)  评论(0编辑  收藏  举报