问题描述
我只是想为我的服务创建一个基于 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 (将#修改为@)