我正在寻找一种服务间通信解决方案。
我有1个服务和带有传入gRPC流的多个Pod。最初的请求调出一个外部资源,该资源最终触发一条带有状态消息的对该服务的请求。这是在单独的线程上,对于本示例,最终转到PodB。我希望PodA响应此状态消息。我试图通过下面的工作流程对此进行演示。
这里最明显的解决方案是添加某种消息传递模式,但我会在确定哪种方法最好的方面寻求帮助。下面的示例介绍了服务网格Sidecar,它将外部请求路由到Pod A随后将订阅的队列。如果使用AMQP,我可能会希望使用direct exchange。
需要任何其他信息,请让我知道。
两个微服务之间的Pub-Sub通信是一种很好的通信模式。本书Cloud Native Patterns恰好描述了这一点,并且在某些情况下使用这种模式优于请求响应。参见第12章。
12.2从请求/响应到事件驱动
12.3事件日志
12.4事件源
这可以通过多种技术来实现,但是使用Kafka with microservices非常合适。 Kafka还是一个专为云设计的分布式系统,类似于Kubernetes中使用的原理。
您的示例
要将其应用于您的示例,queue是Kafka代理(或RabbitMQ?),您需要一种方法将数据从External Resource发布到代理。如果External Resource总是答复请求来自的pod,则sidecar可能是一种解决方案。如果可以配置“回复地址”,则这可以是独立的“适配器服务”,例如Kafka REST proxy如果Kafka被用作经纪人。可能有相应的代理,例如RabbitMQ。