【发布时间】:2018-10-31 10:06:04
【问题描述】:
我正在处理微服务之间的通信。
例如(虚构的例子,只是为了说明):
- 微服务 A - 存储用户(getUser 等)
- 微服务 B - 存储订单(createOrder 等)
现在,如果我想从客户端应用添加新订单,我需要知道用户地址。所以请求会是这样的:
客户端 -> 微服务 B (createOrder for userId 5) -> 微服务 A (getUser with id 5)
微服务 B 将使用来自用户微服务的详细信息(地址)创建订单。
要解决的问题:如何有效地处理微服务 A 和微服务 B 之间的通信,因为我们必须等到响应返回?
选项:
- 使用 RestAPI,
- 使用 AMQP,如 RabbitMQ 并通过 RPC 处理此问题。 (https://www.rabbitmq.com/tutorials/tutorial-six-dotnet.html)
我不知道什么对性能更好。通过 RabbitMQ 或 RestAPI 调用更快吗? 微服务架构的最佳解决方案是什么?
【问题讨论】:
-
这取决于此应用程序的要求。很难从虚构的例子中回答。对我来说,听起来添加订单可能是异步的。也可能是服务 B 已经知道系统中的用户——比如读取事件,然后它只是内存中的查找。
-
在我看来,将用户存储在一些内存中可能会消耗内存。存储其他微服务数据不是反模式吗?既然如此,您认为最好的选择是 HTTP 吗?
-
是的,在这种情况下。 HTTP。
-
如果你想用 API 来做,我强烈建议你使用 gRPC 而不是 http。它非常快。但 AMQP 也非常快,因为它具有始终连接的特性。
标签: rest rabbitmq microservices rpc