当前位置: 首页 > 知识库问答 >
问题:

LabbitMQ消息不会被侦听器按顺序累犯

云德辉
2023-03-14

这些消息的大小不同。12条消息的总体大小接近8MB。

一旦这12条消息发送完毕,我最后也会向机器B发送“完整消息”。

机器B:

    <rabbit:listener-container
        connection-factory="connectionFactory">
        <rabbit:listener ref="onMessageCommand"
            queue-names="CommandQueue" />
    </rabbit:listener-container>
    <bean id="onMessageCommand"
        class="com.mypackage.command.messaging.OnMessageListner">
        <property name="callBackObject" ref="callbackDisEvent" />
        <property name="template" ref="amqpTemplate" />
    </bean>

    <bean id="callbackDisEvent" class="com.mypackage.command.OperationSettingsListener"></bean>

问题:有些时候,我观察到一个“发送完成”被机器B在一些设置之前重复。理想情况下,“发送完成”应该始终是机器B接收的最后一条消息。

我能知道这里有什么问题吗。

共有1个答案

丁豪
2023-03-14

你能提供一些链接,让样例程序以正确的方式实现作用域操作吗。或者示例代码也足够了

我提供给您的链接有以下示例:

Collection<?> messages = getMessagesToSend();
Boolean result = this.template.invoke(t -> {
    messages.forEach(m -> t.convertAndSend(ROUTE, m));
    t.waitForConfirmsOrDie(10_000);
    return true;
});

您只需确保所有发送都在invoke调用的范围内执行...

Boolean result = this.template.invoke(t -> {
    ...
    t.send(...)
    ...
    t.send(...)
    ...
    return true;
}
this.template.invoke(t -> {
    ...
    t.send(...)
    ...
    t.send(...)
    ...
    return null;
}
 类似资料:
  • 我正在使用 发送和 对于现在从rappid mq接收消息,我希望使用类似以下内容的侦听器: 问题是onMessage监听器与Messages一起工作是否有可能在类似的函数中接收简单的可序列化对象?

  • 我有一个Spring应用程序在独立的JBoss EAP 6.2中运行(带有嵌入式HornetQ提供程序)。 消息被成功地放在队列中(我可以在jboss eap-6.2\独立\data\MessagingJournal\hornetq-data-1.hq中看到它们,因为队列是持久的),但不会被侦听器拾取(侦听器中的断点不会被命中)。我怀疑配置中缺少或错误的东西,但看不出是什么。JBoss启动时没有任

  • 我正在使用以下配置的批处理侦听,但我的消息反序列化错误: 在yml中: 使用上面的方法,我轮询了5条消息,但收到了超过100条消息,当我选中它时,将列表中的一条消息反序列化为多条消息。 我检查了我的投票配置没有工作。有人能给我建议解决办法吗 以下是我的日志:

  • 我每个websocket接收几十条消息,这些消息可能只差几毫秒就能到达。我需要用操作来处理这些数据,这些操作有时会花费一些时间(例如,在DB中的插入)。为了处理接收到的新消息,必须完成对前一个消息的处理。 我的第一个想法是用Node.js Bull(用Redis)准备一个队列,但恐怕太长了,无法运行。这些消息的处理必须保持快速。 我尝试使用JS迭代器/生成器(直到现在我还从未使用过),我测试了如下

  • 问题内容: 一个典型的Redis聊天示例将如下所示(仅举一个这样的示例,请参见https://github.com/emrahayanoglu/Socket.io- Redis-RealTime-Chat- Example/blob/master/chatServer.js ): 但是,这里的问题是,当“断开连接”时,侦听器仍然处于连接状态。控制台将继续打印出。如果要检查的事件列表,他们仍然会发现

  • 当重新排队到原始队列时,消息可以再次返回到死信队列,并看到x-death报头计数不断增长。 由于某些原因,我们希望处理count>=5的死信消息(例如),并将其他消息重新排入死信队列。 我需要首先对消息进行基本的ack以检查X死亡计数头,然后将其发送到原始队列,如果计数足够大,否则在死信队列中重新排队。 我无法重新排队到死信队列,因为基本的get不在侦听器内部:抛出AmqpRejectAndDon