RabbitMQ basicGet

时间:2014-08-22 04:25:29

标签: rabbitmq spring-amqp

I have been using `basicGet` method of RabbitMQ to fetch messages from MQ.
everything is working as expected. However when multiple instances of `JVM` are running i.e when multiple worker servers are present , the same message is being sent to all the worker servers (JVM).

I have used a "direct" exchange on the `Rabbit MQ configurations`.

**Sample code :**

    basicGet("SampleQueue", true);

Please help.


**Scenario :** I have 4 messages present in the Rabbit MQ. I have two worker servers defined, which when executed should fetch 2 messages each (2 for each worker server). But currently, I am seeing that the two worker servers is fetching all the messages i.e 4 each.

我想确保以循环方式将消息发送到工作服务器。

所以理想情况下,Rabbit mq不应该向所有工作服务器发布重复的消息。

I am using Spring AMQP implementation. The below snippet is being executed in a Spring Job which extends ItemReader. 

**Sample code :**

GetResponse message = ApplicationContextProvider.getChannel().basicGet(
                "SampleQueue", true);

**Here is my Queue configuration :**

<rabbit:connection-factory id="connectionFactory"
        host="host" username="guest" password="guest" />
    <rabbit:admin connection-factory="connectionFactory" />
    <rabbit:template id="template"
        connection-factory="connectionFactory" exchange="Sample" />

Rabbit MQ中定义的Exchange是

类型:直接 耐用:真实 名称:样本

Rabbit MQ中定义的队列:

name:Sample Queue

绑定:

使用routingKey(Sample)绑定到SampleQueue(Queue)的示例(Exchange)。

感谢。

1 个答案:

答案 0 :(得分:0)

查看RabbitMQ routing tutorial页面,我认为多个绑定部分解释了您的体验。

多个绑定

enter image description here

  

使用相同的绑定绑定多个队列是完全合法的   键。在我们的例子中,我们可以在X和Q1之间添加一个绑定(Q2)   用绑定键黑色。在这种情况下,直接交换将表现出来   喜欢扇出并将消息广播到所有匹配   队列。路由密钥为黑色的消息将传送到Q1   和Q2。

如果您希望进行循环调度,那么每个工作人员都应该订阅这样的队列

enter image description here

这就是工作队列的概念。关于这个概念,RabbitMQ页面有一个很好的tutorial

但是如果您仍然希望使用直接交换,则每个工作人员必须使用不同的路由密钥将自己的队列绑定到交换机。

  

直接交换背后的路由算法很简单 - 一条消息   转到绑定密钥与路由密钥完全匹配的队列   消息。

enter image description here

  

在此设置中,我们可以看到直接交换X绑定了两个队列   它。第一个队列绑定了绑定键orange,和   第二个有两个绑定,一个绑定键为黑色,另一个绑定   与绿色。

     

在这样的设置中,使用路由密钥将消息发布到交换机   橙色将被路由到队列Q1。路由密钥为的消息   黑色或绿色将进入Q2。所有其他消息都将被丢弃。