使用AMQP处理分区数据的最佳方法是什么?

时间:2015-06-25 21:26:56

标签: java rabbitmq amqp spring-amqp

我有几个类似的系统对我的数据的不同部分具有权威性,但我无法从我的"键"哪个系统拥有哪些实体。

我正在努力在AMQP(RabbitMQ)之上构建这个系统,似乎处理这个问题的最佳方法是:

  1. 创建一个名为thingInfo的扇出交换,让我所有其他系统将自己的匿名队列绑定到该交换。
  2. 向交换机发送消息:{"thingId": "123abc"},并设置reply_to队列。
  3. 等待单个远程主机回复我的消息,或者等待超时。
  4. 这是解决此类问题的最佳方法吗?或者是否有更好的方法来构建我正在寻找的东西?这感觉就像RabbitMQ文档中的RPC示例,除了我觉得使用广播交换使事情变得复杂。

    我认为我基本上试图模仿为MCollective's Message Flow描述的模型,但是,虽然我认为MCollective通常期望不止一个响应,但在这种情况下,我希望/需要恰好一个或者,最好是一个清澈的“nope”,“没有它”,“去钓鱼”和“#34;来自"每个人的反应" (如果它真的有可能在这种架构中知道吗?)。

    也许另一种最适合的模式是" Scatter-Gather"?在Spring Integration中似乎有对此的支持。

1 个答案:

答案 0 :(得分:0)

这是一个合理的架构(让不感兴趣的消费者完全忽略这个消息)。

如果有某种方法可以提取消费者用来决定对标题感兴趣的相关数据,那么您可以通过使用主题交换而不是扇出来获得一些效率。

在任何一种情况下,如果不止一个消费者可能会回复它会变得棘手。

正如您所说,如果零消费者回复,您可以使用超时,但如果您认为这可能是频繁的,那么您可能最好使用任意双向消息传递并在代码中执行回复关联而不是使用请求/回复并绑定一个线程,等待永远不会到来的回复,然后超时。

这也可以处理多回复案例。

相关问题