【问题标题】:What is the meaning of 'durable' attribute for JMS Queue in JBoss 7 with HornetQ?带有 HornetQ 的 JBoss 7 中 JMS 队列的“持久”属性是什么意思?
【发布时间】:2014-05-01 16:44:35
【问题描述】:

在 JBoss 7 上使用 HornetQ 配置 JMS 队列期间(基于standalone-full.xml 配置),我注意到一个属性“durable”。

我浏览了几个来源,其中许多都表示队列始终是“持久的”,这意味着消息将始终被传递,即使在发送时潜在接收者处于非活动状态的情况下也是如此。

JBoss 7 HornetQ 中的这个属性是指临时队列吗?还是这个属性是指某种非临时的非持久队列?

【问题讨论】:

    标签: java jakarta-ee jms jboss7.x hornetq


    【解决方案1】:

    我觉得“持久”这个词比队列更适用于主题。持久订阅是订阅者的发布在订阅者未运行时由消息传递提供者存储的订阅。一旦订阅者变为活动状态,这些存储的消息将被传递给该订阅者。对于非持久订阅者,如果他们不活跃,他们将不会收到任何发布。

    关于队列,消息被保留在队列中,直到有人收到它们或它们过期。消息可以是持久的,这意味着它们将在消息提供程序重新启动后仍然存在,并且在消息提供程序关闭时消息丢失的情况下是非持久的。

    【讨论】:

    • 感谢您的信息,正如大多数消息来源所提到的,默认情况下,建议队列是“持久的”。这就是为什么我想知道在 JBoss 7 上的 HornetQ 上下文中非持久队列的含义是什么。我尝试了一些示例并将我的观察结果作为答案发布。
    • @Shashi 说持久性比队列更适用于主题的原因/解释是什么?
    【解决方案2】:

    经过简短的调查,我得出了一些结论。所有观察均基于 JBoss 7.1.1.Final 和 HornetQ Server 2.2.13.Final。

    • 非持久队列不是临时队列。在手动删除之前一直存在。

    • 所有提交到非持久队列的消息都会在 JMS 提供程序重新启动/失败时消失(传递模式,即已提交消息的 PERSISTENT / NON_PERSISTENT 被忽略)。

    • 消息的 JMSDeliveryMode 标头元素的值未修改。特别是,如果消息以 PERSISTENT 传递模式提交到非持久队列,则该标志设置为 PERSISTENT,即使非持久队列不持久保存消息(如果 JMS 提供程序重新启动/失败,它也会丢失)。

    从客户端来看,这似乎有点令人不安,因为由于“非持久”的含义存在问题,发送者可能无法知道消息的声明传递模式是否会受到尊重' 队列。

    此外,在这种情况下,术语“持久队列”似乎与“持久订阅”脱节,因为它似乎不会以任何方式影响将消息传递给非活动消费者。

    【讨论】:

      【解决方案3】:

      JMS 中的持久订阅意味着如果订阅者断开连接,然后再次连接到 JMS 目标(队列或主题),它将接收到目前为止已发送到目标且尚未过期的所有消息。

      【讨论】:

      • 请注意,JBoss 上的属性似乎是指队列,而不是订阅者/订阅。
      猜你喜欢
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多