如果侦听器关闭,持久性 JMS 消息如何存活

Posted

技术标签:

【中文标题】如果侦听器关闭,持久性 JMS 消息如何存活【英文标题】:How can persistent JMS message survive if listener shut down 【发布时间】:2019-01-04 07:38:38 【问题描述】:

我有一个主题,我在主题上发布了一条消息注释:我停止了所有 JMS 队列侦听器。 现在我现在重新启动服务器并打开监听器,我期待系统使用我之前发布的消息。但事实并非如此。

我已阅读 JBOSS 的文档 - hornetq 它说所有 JMS 消息本质上都是持久的。我如何证明消息本质上是持久的?消息应该在第二次运行中被消费;因为消息会在消息队列的某个持久数据库中。

http://activemq.apache.org/what-is-the-difference-between-persistent-and-non-persistent-delivery.html

文档说持久 JMS 消息可以在代理重启后幸存下来,我的问题是指持久 JMS 消息可以在侦听器重启后幸存下来,如果不能,我该如何实现?

【问题讨论】:

【参考方案1】:

我认为您只是在体验 JMS 主题的正常语义。这里有几点需要牢记:

    发送到某个主题的任何消息都放置在该主题的匹配订阅中。如果该主题没有匹配的订阅,则该消息将被丢弃。 默认情况下,主题订阅不是持久的,当订阅者断开连接时,非持久订阅中的任何消息都会被丢弃。 为了使发送到主题的消息在代理重新启动后仍然存在,订阅必须是持久的并且消息必须是持久的。

【讨论】:

以上是关于如果侦听器关闭,持久性 JMS 消息如何存活的主要内容,如果未能解决你的问题,请参考以下文章

深入讲解ActiveMQ5.X消息的持久性

JMS开发步骤和持久化/非持久化Topic消息

理解JMS规范中消息的传输模式和消息持久化

JMS与ActiveMQ消息数据持久化

使用Redis的Pub/Sub来实现类似于JMS的消息持久化

JMS学习--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系