【问题标题】:Difference between persistent and non-persistent delivery持久性和非持久性交付之间的区别
【发布时间】:2017-04-18 05:33:19
【问题描述】:

我阅读了ActiveMQ FAQ 之后的内容,对此我的理解是,假设我在 ActiveMQ 服务器关闭时向我的 ActiveMQ 服务器发送消息,但是如果我将生产者的交付模式标记为持久producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);,那么消息将是ActiveMQ 服务器启动后交付。

现在,为了测试这一点,我只是停止了我的 ActiveMQ 服务器,然后从 JMS 生产者发送了一条消息,现在正如预期的那样,我收到了连接被拒绝错误(请注意,我没有关闭我的 JMS 生产者连接/borker)但我当我启动我的 ActiveMQ 服务器时,我没有收到该消息。

我是否误解了那个常见问题解答,如果是,那是什么意思?

【问题讨论】:

    标签: jms activemq


    【解决方案1】:

    当您持久发送消息时,代理将该消息存储在磁盘上的存储区中,以便稍后在代理关闭或关闭并随后重新启动时恢复。当消息作为非持久性发送时,它仅存储在内存中,如果代理因某种原因停止,这些消息将丢失,再也不会被听到。

    当代理关闭并且您尝试发送给它时,您可能会想象代理无法存储持续发送的消息,因为它是...关闭。

    如果客户端使用故障转移传输,则发送应该阻止等待重新连接到同一代理或您配置的备用代理,然后将消息发送到该代理。当不使用故障转移传输时,客户端会出现错误,这取决于您稍后重新发送。

    设置persistent为发送模式不会超越时间和空间让消息在宕机前到达broker。

    【讨论】:

    • 完美,澄清了我的困惑。
    • 请再澄清一下 - 我看到在我发送和接收消息的 JMS 应用程序中,我看到创建了一个类似 activemq-data\localhost\KahaDB 的目录,它肯定被用作消息存储,我想知道什么这家店是用来做的吗?我可以理解像 KahaDB 这样的持久存储被代理使用,但是在我的 JMS 应用程序端这样做的目的是什么。除了你的回答,如果你能给我一些链接,我可以在那里了解更多信息,那真的很有帮助。
    • @hagrawal 请将其作为新问题而不是评论发布
    • @Tim:你能回答评论还是我应该打开一个新问题?
    • 需要提出一个新问题并正确解释您在做什么以及问题是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2011-04-21
    • 2011-12-27
    • 2012-12-26
    相关资源
    最近更新 更多