基于 gRPC 的 sidecar .NET 5

问题描述

我只是想为我的服务创建一个基于 gRPC 的 sidecar,以简化通信和处理横切关注点等。我从一个简单的客户端和服务器 gRPC 服务开始,它们共享相同的 proto 文件。之后,我在中间添加了一些服务来接收客户端的 gRPC 请求并进行一些消息转换、发现可用服务等。

在中间服务中,它扮演客户端 sidecar 的角色(将来还会添加服务器 sidecar),我使用了带有此选项的 GRPC.ASPNetCore 包:

option.IgnoreUnknownServices = true;

所以,我可以在我的自定义中间件中处理请求,我面临的挑战如下:

请求反序列化

我正在使用 protobuf-net 及其 reflection API 在运行时为我的原型生成 C# 代码,并使用 Roslyn 编译它们,以便能够拥有与我的原型等效的 CLR 类型。之后,我使用 protobuf-net 的序列化程序来反序列化我从自定义中间件的请求流中读取的数据。

  • 我可以阅读压缩邮件吗?
  • 如何读取服务器流、客户端流或双向流?
  • 这种方法是否正确,或者是否有适用于这种情况的内置技术?

将请求转发到其他服务

发现目标节点后(如果该节点接受 gRPC 请求),我必须将传入的 Http 请求转发到提到的节点。有没有什么快速的方法可以在另一个服务中转发这样的请求? 这里的另一种选择是在运行时创建 gRPC 客户端并使用来自 http 请求流的反序列化值调用它。但我必须弄清楚我该怎么做。

我脑子里有更多的问题和模棱两可的点。如果您回答我的问题或建议任何参考资料,我将不胜感激。

我的项目是 here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...