【问题标题】:Redelivering JMS messages from the DLQ从 DLQ 重新传递 JMS 消息
【发布时间】:2020-03-29 09:13:07
【问题描述】:

我有两个组件通过 wildfly 实例中的 jms 队列进行通信。一旦队列的消费者断开连接或停止,消息就会被转发到 DLQ(至少在 wildfly 重新启动时)。

是否可以将 wildfly 配置为在消费者重新连接到队列后立即从 DLQ 自动重新传递消息?

一些细节

  • Wildfly 版本:8.2.0

  • standalone.xml - 据我所知,没什么特别的


        <jms-destinations>
            <jms-queue name="ExpiryQueue">
                <entry name="java:/jms/queue/ExpiryQueue"/>
                <durable>false</durable>
            </jms-queue>
            <jms-queue name="DLQ">
                <entry name="java:/jms/queue/DLQ"/>
                <durable>false</durable>
            </jms-queue>
                            ...
            <jms-queue name="Q1-Producer-to-Consumer">
                <entry name="java:/queue/Q1-Producer-to-Consumer"/>
                <entry name="java:jboss/exported/queue/Q1-Producer-to-Consumer"/>
                <durable>false</durable>
            </jms-queue>

    </jms-destinations>

谢谢。

【问题讨论】:

  • 如果您有 RedHat 帐户,请查看this article。它的要点是,如果您的 DLQ 仅包含来自单个队列的消息,您可以在该队列上使用 move-messages CLI 操作,否则您需要编写一个将读取消息的消费者/生产者,从消息属性中提取它们的来源(可能是“_AMQ_ORIG_QUEUE”)并将它们写回到有问题的队列中。

标签: wildfly wildfly-8


【解决方案1】:

DLQ 只获取在消息处理过程中抛出异常的消息。如果消费者断开连接,消息将仍然坐在那里等待传递

如果您看到在服务器重新启动期间消息到达 DLQ 的问题,这表明您的消费者在所需资源可用之前正在消费消息,因此在处理消息时出错。您最好修复您的消费者不要过早开始消费消息,而不是尝试从 DLQ 中恢复失败的消息

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 2012-10-02
    • 2013-06-22
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多