【问题标题】:Accessing messages in Dead letter Queue of ActiveMQ and redeliver to webservice or socket after consumption访问ActiveMQ死信队列中的消息,消费后重新投递到webservice或socket
【发布时间】:2017-02-18 18:06:31
【问题描述】:

我正在使用 ActiveMQ 在 Java 中编写应用程序,其中我使用生产者和异步消费者机制,其中生产者发送的消息由于网络故障而未被消耗。因此这些消息被发送到 ActiveMQ 的死信队列。

我的问题是如何访问死信队列中的消息并通过在消费者中使用它并发送到 Web 服务或套接字等来执行重试。任何代码示例都会很棒。

【问题讨论】:

    标签: java jakarta-ee jms activemq jms-topic


    【解决方案1】:

    DLQ 就像任何主题或队列一样,您可以像任何主题或队列一样订阅它并使用累积的消息。这是列表http://activemq.apache.org/advisory-message.html

    要订阅它的 DLQ 的名称是 ActiveMQ.DLQ 如果你没有 individualDeadLetterStrategy ,你订阅并做你的业务 onMessage 方法。 http://activemq.apache.org/message-redelivery-and-dlq-handling.html

    【讨论】:

    • 不,我的问题不在于咨询支持,更准确地说,我想检索 ActiveMQ.DLQ 中的消息并不断迭代 DLQ 中的消息,以便我可以执行一些重新传递机制
    • 正如我所说,DLQ 就像任何主题或队列一样,您可以像任何主题或队列一样订阅它并消费消息
    【解决方案2】:

    Hassen 关于设置一个使用 DLQ 条目的 MDB 的可能性是完全正确的。

    但是,设置重新传递策略的正确位置是队列或主题本身(请参阅http://activemq.apache.org/redelivery-policy.html),而不是使用死信队列。实际上,您只有一个用于 MOM 的 DLQ 实例,它将包含来自所有不同队列/主题的消息,并且在那里设置故障转移机制将意味着管理不同的消息结构

    【讨论】:

    • 也可以使用individualDeadLetterStrategy
    • 但我同意,如果可能,最好设置重新投递政策,但最后如果无法投递邮件,他们会转到 DLQ
    • 不知道,一定是提供者特定的功能...无论如何,当您掉入 DLQ 时,您会丢失一些消息元数据(重新发送计数等...)。
    • 消息发送到DLQ后是否可以重新投递
    • 不,它们在达到最大交付尝试后被发送到 DLQ
    猜你喜欢
    • 2018-04-23
    • 2015-09-23
    • 2017-11-06
    • 2015-09-23
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2022-01-14
    • 2020-08-30
    相关资源
    最近更新 更多