2015-11-17 42 views
0

我们正在建设使用的RabbitMQ和Spring的监听器,容器生产并发如下Web应用程序确定并发同时(例如本例中有10个线程),但我不希望它们同时处理具有相同数据的消息。例如,如果我发送Foo对象的id,我只想要同时处理不同的Foo对象,但应该按顺序处理相同的Foo对象。基于密钥(如ID)与RabbitMQ的

我已经了解了RabbitMQ的交换和队列类型,但无法想出这些与他们中的任何一个。

我能想到的一种方式是创建多个不同模式的队列,如foo.handle.1foo.handle.2等等。然后将这些Foo对象的ID散列到这些模式中。但是,对于我们拥有的每种类型的队列并对其进行管理,都可以非常容易地失控。

有没有一种机制可以用RabbitMQ来实现?

回答

0

与JMS不同,RabbitMQ(或AMQP本身)没有消息选择器的概念 - 不能从队列中提取选择消息。

RabbitMQ的唯一解决方案是每个类型的单独队列和每个队列上的单个使用者。

+0

非常感谢您的回答。你能否详细说明'每个类型的单独队列'。我只有一个'Foo'类型,并且有很多'Foo'对象具有不同的ID。我应该像我在这个问题中提出的那样散列ID吗? – nilgun

+0

对不起 - 我误读 - 是的;您需要散列该id以确定将其发送到哪个队列。 –

+1

再次感谢,最后一件事情是,可以使用绑定模式“foo.handle。#”和路由密钥“rabbitmq-consistent-hash-exchange foo.handle。 '帮助我解决这类问题?我仍然需要创建10个队列,但生产者不必担心散列函数,对吧? – nilgun