[Dapr] - gRPC with Pub/Sub | Word count: 255 | Reading time: 1min | Post View:
Introduction
我在 components 配置文件夹下写了 pubsub.yaml
但是在 gRPC 服务中未使用发布订阅。在启动服务的时候报错
1 2 3 Error status code 'Unimplemented' raised. Grpc.Core.RpcException: Status(StatusCode="Unimplemented", Detail="") at Dapr.AppCallback.Autogen.Grpc.v1.AppCallback.AppCallbackBase.ListTopicSubscriptions(Empty request, ServerCallContext context)
正文
这是因为 dapr 认为我们的 gRPC 服务使用了发布订阅,但是没有重写 ListTopicSubscriptions
方法。解决方案就是在服务中重写 ListTopicSubscriptions
。 或者不使用含有 pubsub.yaml
的 components-path
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 using System;using System.Threading.Tasks;using Dapr.AppCallback.Autogen.Grpc.v1;using Dapr.Client.Autogen.Grpc.v1;using Google.Protobuf.WellKnownTypes;using Grpc.Core;using MediatR;using static Dapr.AppCallback.Autogen.Grpc.v1.AppCallback;namespace FileService.Services.GrpcService { public class GrpcService : AppCallbackBase { private readonly IMediator _mediator; public GrpcService (IMediator mediator ) { _mediator = mediator ?? throw new ArgumentNullException(nameof (mediator)); } public override async Task<InvokeResponse> OnInvoke ( InvokeRequest request, ServerCallContext context ) { } public override Task<ListTopicSubscriptionsResponse> ListTopicSubscriptions (Empty request, ServerCallContext context ) { } } }
最后别忘了在 startup
中注册服务
1 2 3 4 5 6 7 8 9 10 public void Configure (IApplicationBuilder app, IWebHostEnvironment env ){ app.UseEndpoints( endpoints => { endpoints.MapGrpcService<GrpcService>(); } ); }