【问题标题】:How to establish communication between micro services? [closed]微服务之间如何建立通信? [关闭]
【发布时间】:2020-09-02 06:35:38
【问题描述】:
您好,我正在开发一些用于演示的微服务。我创建了两个服务。一种是持有用户 ID、姓名、地址的用户。第二个服务是产品服务。这包含产品 ID、产品名称、产品描述。现在我想开发第三种服务,即篮子服务。它将从用户服务中获取用户ID,从产品服务中获取产品ID。现在在第三项服务(篮子服务)中,我想获取用户和产品服务的数据。例如,用户会将用户 ID 和产品 ID 发送到购物篮服务。现在购物篮服务应该从用户服务和产品详细信息中获取用户详细信息和产品详细信息。现在我想从购物篮服务中调用用户服务和产品服务。我经历过微服务之间的通信,了解的机制很少。我关注了this。
- 同步 HTTP 请求
- 类似 Rabit MQ 的异步
我只是想了解上述情况,哪种机制最适合?有人可以帮我吗?
【问题讨论】:
标签:
c#
asp.net-core
asynchronous
microservices
synchronous
【解决方案1】:
假设 HTTP 服务并不总是启动和运行,最常见的 POST/PUT 请求通信方式是通过消息代理,例如 Rabbit MQ。
假设您只有两个服务:A 和 B。
案例 1:同步 HTTP 请求
如果B 已关闭,并且用户尝试从A 到B 执行一些发布操作,则请求丢失,那么最终用户将不得不等待并重试他的操作,以便获得它上班。
另一方面,
案例2:类似Rabit MQ的异步
用户从服务A创建一个POST请求,然后是A服务,而不是直接通过HTTP post调用B,它向队列发送一条消息,它的工作就完成了——它可以通信一个像Accepted 这样的状态给用户。
一旦B 启动并运行,它将从队列中获取该消息,对其进行处理,并以某种方式与用户交流该操作确实已完成:WebSocket/电子邮件等。
【解决方案2】:
现在在第三个服务(篮子服务)我想获取用户和产品服务的数据。例如,用户会将用户 ID 和产品 ID 发送到购物篮服务。现在购物篮服务应该从用户服务和产品详细信息中获取用户详细信息和产品详细信息。现在我想从购物篮服务中调用用户服务和产品服务。微服务之间的通信我走遍了,了解的机制很少。
这些场景似乎最适合HTTP 或者可能是带有request/reply pattern 的异步RabbitMQ。我在HTTP 微服务上做了很多工作并取得了很大的成功,但从未使用过request/reply pattern,所以我不能告诉你它是否运作良好。从理论上讲,它会更有效率,但要实现它可能具有挑战性。
一般来说,有些场景似乎更适合异步: