服务请求/响应:您是否会使用路由密钥并将消息存储在同一RabbitMQ队列中?

时间:2016-11-21 11:45:31

标签: rabbitmq messaging soa microservices

例如,我实现了一个搜索索引服务,它接收搜索请求并使用消息生成响应。

目前我已经定义了一个队列来排队搜索请求,另一个队列将搜索结果排入队列

您是否会将此重构为仅排队到消息具有请求响应 路由密钥的唯一队列?或者这个特殊情况是否过度使用 RabbitMQ

2 个答案:

答案 0 :(得分:1)

听起来你想使用RPC模式?要遵循该协议,您应该根据ReplyTo中的ReplyToAddressBasicProperties发布回复。这样,由调用者(请求者)决定预期响应的发布位置。在我看来,声明一种消息类型的专用交换可能是过度的。要获得更高的性能,您可以使用direct reply to功能。有a lot of high level clients可以帮助您处理其中的一些事情。

答案 1 :(得分:0)

经过一些研究,我认为这应该是良好做法

  • 应该有一次交换。例如 searchrequest
  • 两个队列,一个用于传入请求,另一个用于响应
  • 整个单一交换应根据给定的路由密钥从请求或响应队列路由消息。
  • 当某个服务执行搜索请求时,会向 searchrequest 交换和请求路由密钥发送消息。当搜索索引服务创建响应时,也将其发送到 searchrequest 交换,但它会使用响应路由密钥发布响应消息。

在一天结束时,使用路由键将消息发布到我的特定情况下的同一队列并不是自然。感觉很烦人。