Rabbitmq 兔眼

Rabbitmq 兔眼,rabbitmq,spring-amqp,Rabbitmq,Spring Amqp,我希望确保消息以循环方式发送到工作服务器 因此,理想情况下,Rabbit mq不应向所有工作服务器发布重复消息 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 server

我希望确保消息以循环方式发送到工作服务器

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

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中定义的交换为:

类型:直接 持久的:真的 名称:样本

Rabbit MQ中定义的队列:

名称:示例队列

绑定:

SampleExchange绑定到带有routingKey Sample的SampleQueue队列

谢谢。

查看页面,我认为多重绑定部分解释了您的体验

多重绑定

使用相同的绑定绑定多个队列是完全合法的 钥匙在我们的示例中,我们可以在X和Q1和Q2之间添加绑定 绑定键为黑色。在这种情况下,直接交换将正常工作 如扇出,将向所有匹配的用户广播消息 排队。路由键为黑色的消息将传递到两个Q1 和Q2

如果您想要一种循环调度,那么每个工人都应该订阅相同的队列,如下所示

这就是工作队列的概念。RabbitMQ页面对这个概念有很好的理解

但是,如果您仍然希望使用直接交换,那么每个工作进程都必须使用不同的路由密钥将自己的队列绑定到该交换

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

在此设置中,我们可以看到绑定了两个队列的direct exchange X 去吧。第一个队列用绑定键orange绑定,而 第二个有两个绑定,一个绑定键为黑色,另一个绑定键为黑色 用绿色

在这种设置中,使用路由密钥将消息发布到exchange 橙色将被路由到队列Q1。路由密钥为的邮件 黑色或绿色将转到Q2。所有其他消息将被丢弃


在完成basicGet后,您确定您正在进行basicAck?您需要显示您的代码/配置;这个问题与“春季amqp”有什么关系?您正在直接使用rabbit API。我正在使用spring作业从rabbit MQyes读取消息,我正在执行basicAck。!!basicGetSampleQueue,true,这里布尔值true表示自动确认为true。!!您是否正在发送具有routingkey='Sample'的邮件?您正在创建多少个队列-一个或两个?否我正在发送没有路由键的消息:amqpTemplate.sendSampleQueue,message;只有队列。没有。我正在发送没有路由密钥的消息:amqpmetplate.sendSampleQueue,message;只有一个队列。邮件已成功投递。但是,当我在工作服务器的帮助下从队列中侦听消息时,相同的消息将发送到所有工作服务器。它没有以一种全面的方式运行。我不知道这怎么会发生,除非您向RabbitMQ发送重复的消息,或者确实创建了两个队列。如果您只有一个队列,那么这种情况就不会发生。或者我错过了一些基本的东西。用rabbitmq管理插件检查状态。嘿,菲利普..你说得对。我看到重复的消息将进入队列。非常感谢。!!
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" />