【问题标题】:Does WMQ topic save message itself?WMQ 主题是否保存消息本身?
【发布时间】:2017-02-03 08:58:22
【问题描述】:

如果发布者向 WMQ 主题发布了一些消息,但订阅者没有接受,那么这些消息保存在哪里?有什么方法可以知道消息数吗?

【问题讨论】:

    标签: jms ibm-mq


    【解决方案1】:

    由于 MQ 符合 JMS,答案主要是 JMS 答案。

    1. 如果订阅不持久且未注册订阅,则该订阅者的消息将被丢弃。
    2. 如果订阅是持久的,MQ 会创建一个队列(或者如果订阅者指定,则使用一个预定义的队列)来传递消息。如果订阅者不使用它们,这些消息将在那里收集。
    3. Dave 在他的 cmets 中指出的第三种情况是非持久订阅者保持订阅打开但不使用消息。由于创建了一个队列来接收这些队列深度,因此可以查询队列深度以确定是否有备份。

    基于每个订阅(持久或其他)都有一个队列,只需查看持久订阅者的队列以确定未完成的消息数。

    另请参阅 MQ 知识中心中的 Publish/subscribe lifecycles,了解有关持久订阅者队列的行为和规范的更多描述。

    当然,如果该队列已填满,则行为会发生变化。根据设置,发布者阻止或发布继续,但消息被路由到异常队列(如果指定)、DLQ 或丢弃。

    感谢 Dave Ware 关于非持久订阅的 cmets。

    【讨论】:

    • 即使订阅是非持久的,也有一个与订阅关联的队列。所以同样的规则适用......当消息发布时,一个副本将被放入订阅的队列中。如果订阅应用程序没有提取该消息,则在删除订阅(及其托管队列)时,这些消息将被丢弃。
    • 谢谢。我已更新响应以捕获 cmets。希望我写的符合你的意图。 :-)
    • 非常感谢您耐心的解释,非常感谢。
    【解决方案2】:

    我想知道您是否在询问 MQ 是否保留了发布到某个主题的所有消息的存储,独立于任何已注册的订阅?

    如果这是问题,那么不,不是。当消息发布时,它们与每个现有订阅相匹配,并按照 T.Rob 的描述将副本发送到它们的每个关联队列。

    所以唯一需要担心的是订阅的队列深度。

    (有一点需要注意,MQ 支持“保留发布”,这意味着如果您选择这样做,MQ 只会保留该主题字符串的最新发布以供延迟订阅)。

    我试图在这里解释所有这些(幻灯片/视频),这可能会有所帮助...http://www.slideshare.net/DavidWare1/ame-2271-mq-publish-subscribe-pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      相关资源
      最近更新 更多