【发布时间】:2021-07-05 07:46:21
【问题描述】:
我不熟悉 RabbitMQ 等消息传递代理的概念,想学习一些最佳实践。
RabbitMQ 似乎是促进微服务之间异步通信的好方法,但是,我有一个初学者问题,我无法在其他任何地方找到答案。
什么时候不会在微服务架构中使用 RabbitMQ 等消息代理?
举个例子:
假设我有两个服务。服务 A 和服务 B (授权服务)
客户端向服务 A 发出请求,该服务又必须与服务 B (auth service) 通信以验证用户身份并授权请求。 (使用基本身份验证)
Internet
Client ----------------> Service A +-------> Service B [Authenticate/Authorization]
HTTP request HTTP or AMQP??
在我有限的理解中,我可以预见在上述场景中使用 AMQP 的问题是服务 A 能够处理请求并向客户端发送响应可接受的时间范围,因为它必须等待服务 B 消费并响应消息。
本质上,让服务 A 通过 AMQP 等待服务 B 的响应是不是一个坏主意?
还是我完全错过了 AMQP 的要点??
【问题讨论】:
-
我个人喜欢远离消息代理,因为它增加了复杂性(移动部件越少,恕我直言)。我只是简单地以同步方式使用 grpc 进行服务间通信。当需要异步时,recipent 服务将简单地创建一个数据库记录(将任务添加到内部队列)并立即返回响应。例如排队要发送的电子邮件。我与消息代理合作的唯一时间是每个微服务都由其自己的开发团队维护。