微服务之间如何建立通信?

3

你好,我正在为演示编写一些微服务。我创建了两个服务。一个是用户(User)服务,它包含userId、name和address。第二个服务是产品(Product)服务,它包含productId、productName和productDescription。现在我想要开发第三个服务,即购物篮(Basket)服务。该服务将从用户服务获取userId并从产品服务获取productId。现在,在第三个服务(购物篮服务)中,我想要从用户服务和产品服务获取数据。例如,用户将向购物篮服务发送userId和productId。然后购物篮服务应从用户服务和产品服务获取用户详细信息和产品详细信息。我想要从购物篮服务调用用户服务和产品服务。我已经研究了微服务之间的通信并理解了一些机制。我遵循了这里所述的方法。

  1. 同步HTTP请求
  2. 异步如Rabit MQ

我只是想了解像上面这样的场景,哪种机制最适合?有人可以帮我吗?

2个回答

2
假设HTTP服务并非总是运行正常,与其直接通过HTTP请求执行POST/PUT请求,更常见的方式是通过消息代理来进行通信,例如Rabbit MQ。
假设您只有两个服务:A和B。 情况1:同步的HTTP请求
如果B已经停机,用户试图从A向B执行某些POST操作,则该请求会丢失,然后最终用户必须等待并重试他的操作,以便它能够工作。
另一方面, 情况2:异步的像Rabit MQ
用户从服务A创建一个POST请求,然后A服务不是直接通过HTTP post调用B,而是将消息发送到队列中,然后它的工作就完成了——它可以向用户通信状态,如“已接受”。
一旦B处于运行状态,它将从队列中取出该消息,处理它,并以某种方式与用户通信,表明该操作确实已完成:WebSocket/email等。

2
在第三个服务(Basket Service)中,我想获取用户和产品服务的数据。例如,用户将用户ID和产品ID发送到篮子服务。现在,篮子服务应该从用户服务和产品服务中获取用户详细信息和产品详细信息。现在我想从篮子服务调用用户服务和产品服务。我已经了解了微服务之间的通信,并理解了一些机制。
这些场景似乎最适合使用HTTP或可能是异步RabbitMQ与请求/响应模式。我已经使用HTTP微服务工作过很多次,并取得了很大的成功,但从未使用请求/响应模式,因此无法告诉您它是否有效。从理论上讲,它会更有效率,但启动可能会具有挑战性。
总体而言,以下情况似乎更适合于异步:
- 用户在请求后不需要任何立即的信息 - 操作需要很长时间

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接