我尝试了一些链接(并尝试了发布的建议(https://github.com/dapr/dotnet-sdk/issues/609)在发布这个问题之前,如果之前重复过,请提前道歉。如果有任何建议,我将不胜感激。提前谢谢。
-
我有一个.net核心应用程序,我能够在自带dapr_Redis、dapr_zipkin和dapr_placement容器的自托管dapr开发环境中保存、存储和检索状态。然而,该应用程序正在本地运行,一切都很好。我能够从dapr_redis中检索所有密钥,并在应用程序中使用它们。我用来测试这一切的命令是------------------>
dapr run--app id DaprMyApp--dapr http端口3500--组件路径/组件dotnet运行。
-
现在,我把它们放在一个docker compose文件中,我的应用程序也被容器化了(ps:如果没有任何Dapr,应用程序在docker中运行得非常好)。当该行执行----->
-
等待daprClient。GetStateEntryAsync<IList<ServicePrincipal>gt;(storeName,"LightApplications");
显示以下错误Dapr。Dapr异常:状态操作失败:Dapr终结点指示失败。有关详细信息,请参阅InnerException--->Grpc。果心RpcException:状态(StatusCode="Internal",Detail="Error starting gRPC call。HttpRequestException:Connection rejected SocketException:Connection Rejected",DebugException="System.Net.Http.HttpRequestException:连接被拒绝--->系统网插座。SocketException(111):连接被拒绝
从daprd容器日志时间=";2022-03-30T22:23:13.1586783Z";level=info msg=";所有未处理的组分";app_id=DaprMyApp实例=6e094ea3b2范围=dapr.runtime类型=日志版本=1.6.1
时间=";2022-03-30T22:23:13.1588662Z";level=info msg=";启用gRPC跟踪中间件";app_id=DaprMyApp实例=6e094ea3b2范围=dapr.runtime.grpc.api类型=日志版本=1.6.1
时间=";2022-03-30T22:23:13.1589773Z";level=info msg=";启用gRPC度量中间件";app_id=DaprMyApp实例=6e094ea3b2范围=dapr.runtime.grpc.api类型=日志版本=1.6.1
时间=";2022-03-30T22:23:13.1592719Z";level=info msg=";API gRPC服务器正在端口50001上运行;app_id=DaprMyApp实例=6e094ea3b2范围=dapr.runtime类型=日志版本=1.6.1
时间=";2022-03-30T22:23:13.1598482Z";level=info msg=";enabled metrics http中间件";app_id=DaprMyApp实例=6e094ea3b2作用域=dapr.runtime.http类型=log ver=1.6.1
时间=";2022-03-30T2:23:13.1599458Z";level=info msg=";启用跟踪http中间件";app_id=DaprMyApp实例=6e094ea3b2作用域=dapr.runtime.http类型=log ver=1.6.1
时间=";2022-03-30T22:23:13.1601179Z";level=info msg=";http服务器正在端口3500上运行";app_id=DaprMyApp实例=6e094ea3b2范围=dapr.runtime类型=日志版本=1.6.1
时间=";2022-03-30T2:23:13.1601313Z";level=info msg=";请求正文大小参数为:4〃;app_id=DaprMyApp实例=6e094ea3b2作用域=dapr.runtime类型=日志版本=1.6。。。。。。。时间=";2022-03-30T22:23:13.1609711Z";level=info msg=";dapr已初始化。状态:正在运行。Init Elapsed 175.1433ms";app_id=DaprCirus实例=6e094ea3b2作用域=dapr.runtime类型=日志ver=1.6.1
-
docker组合文件看起来像
版本:";3.8〃;服务:应用程序:图片:DaprMyApp:最新部署:副本:1端口:-";5001:5001";#-";50001:50001";依赖于:-redis卷:-类型:绑定来源:c:\trust
目标:/root/.dotnet/https环境:-DAPR_HOST=主机.docker.internal-DAPR_GRPC_PORT=5001-ASPNETCORE_URLS=https://+:5001;http://+:5000app-dapr: image: "daprio/daprd:latest" #command: [ "./daprd", "-app-id", "DaprMyApp", "-components-path", "/components" ] command: ["./daprd", "-app-id", "app", "-placement-host-address", "placement:50006", "-dapr-http-port", "3500", "-dapr-grpc-port", "50001", "-components-path", "/components"] ports: - "3500:3500" - "50001:50001" volumes: - "./components/:/components" depends_on: - redis network_mode: "service:app" redis: image: "redis:alpine" ports: - "6379:6379"
Components文件夹中的StateStoreYaml当应用程序在本地运行时,用例1 redis:6379中测试的WHen被localhost:6379替换。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: redis:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
DataPoint2当所有容器按照docker compose文件中的描述出现时。以下命令也可以正常工作(如中所述进行测试https://github.com/dapr/dapr/issues/2838)Invoke-RestMethod-Method Post-ContentType"application/json"-Body"[{quot;key":"name","value"Bruce Wayne"}]"-Uri"http://localhost:3500/v1.0/state/statestore'
DataPoint3如果我单独启动sidecar->
dapr run--应用程序id DaprMyApp--dapr http端口3500--组件路径/组件
从上面的日志中检查GRPC显示的端口检查Dapr sidecar是否正在监听GRPC端口54799Dapr sidecar启动并运行。你开始行动了!Dapr日志将显示在此处。
然后将此端口添加到DAPR_GPRC_port到机器的环境变量
然后使用dotnet run在另一个窗口中单独运行应用程序。效果完美,
我希望让应用程序与DAPR sidecar对话,并在docker中从Redis容器中获取信息。提前感谢您的指点。
我能够用docker compose运行这项工作,并在本地docker上关闭集群模式。所有3个容器都可以正常工作(daprd、app和redis),并且能够在redis中保存和检索应用程序的状态。我以前使用docker堆栈部署进行测试。
感谢