【问题标题】:ActiveMQ how to keep message that failed to sent to consumer on queue /topic?ActiveMQ如何将未能发送给消费者的消息保留在队列/主题上?
【发布时间】:2015-02-03 14:03:28
【问题描述】:


我还在学习这个 activemq 和 jms 的东西。 我已经尝试了一些示例,现在我可以从队列/主题中生成和使用消息。

现在我有一个问题,当我的客户/消费者失去连接时,队列/主题中的消息仍然发送该消息,该消息丢失并且不保留在队列/主题中。所以我的问题是如何保留该失败的消息以及如何让代理重新发送该消息?

谢谢

【问题讨论】:

    标签: jms activemq


    【解决方案1】:

    你有点混淆了术语。

    队列将保留消息直到被使用或代理重新启动,除非消息已被标记为持久,在这种情况下,即使在代理重新启动后它们也会保留。

    主题仅将当前消息传递给任何当前订阅者。但是,您可以使用多种方法来持久化发布到主题的消息:

    1. 长期订阅者。
    2. Virtual Destinations.

    出于多种原因,虚拟主题往往比持久订阅者更受欢迎,但这实际上取决于用例。

    如何创建持久订阅者取决于您用于创建订阅者的内容(Spring、POJO 还是其他 API?)。所有方法都会在某个时候调用Session.createDurableSubscriber 方法,但我建议在选择虚拟主题或复合队列之前阅读它们的行为方式。

    【讨论】:

    • 谢谢..那么,我怎样才能从经纪人到消费者进行“保证交付”?
    • 确保它是作为持久消息生成的。此外,您还需要查看某种形式的客户端确认或交易。
    【解决方案2】:

    你要找的东西可能是Durable subscription

    您可以在http://activemq.apache.org/how-do-durable-queues-and-topics-work.html找到相同的文档

    【讨论】:

    • 感谢您的回复。如何将消费者设置为持久消费者?
    • 我同意Erik的回答,你可以看看
    猜你喜欢
    • 2013-08-01
    • 2021-11-25
    • 2018-03-08
    • 2012-08-11
    • 2015-02-02
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    相关资源
    最近更新 更多