gpt4 book ai didi

activemq - 虚拟主题/队列和持久性

转载 作者:行者123 更新时间:2023-12-04 19:16:25 24 4
gpt4 key购买 nike

当没有消费者收听时,发布到虚拟主题的消息会发生什么?经纪人会保留它们一段时间,直到有订阅者可用吗?

进一步来说 :
在 T0 和 T1 消息 M0 和 M1 被张贴。在 T2,消费者 C1 连接,他会收到 M0 和 M1 吗?显然,在 T3 和 T4 发布的消息 M2 和 M3 将被 C1 接收,但是在 T5 连接的新消费者 C2 将接收什么?所有消息,M2 和 M3,还是没有?

最佳答案

这取决于主题的性质:
如果主题是持久的(有持久消费者订阅它),则代理将保留主题中的消息,直到所有持久消费者消费这些消息。
如果主题是非持久的(没有持久的消费者),则消息甚至不会发送到该主题,因为将没有持久订阅。

对于您的示例,我会认为您正在使用持久订阅/消费者:
情况1:

  • T-2 C1 和 C2 持久订阅主题
  • T-1 C1 和 C2 断开
  • T0:M0 已发布
  • T1:M1 已发布
  • T2:C1 连接。 C1 接收 M0 和 M1
  • T3:发布M3。 C1 收到 M3
  • T4:发布M4。 C1收到M4
  • T5:C2 连接, C2 接收 M0、M1、M2、M3、M4

  • 那是因为他们持有 durable subscriptions
    使用持久主题/队列时需要非常小心:如果消费者没有取消订阅,代理将保留消息直到消息存储爆炸。您需要确保它不会发生(通过设置 eviction policies 和/或在消息上设置生存时间)。
    当然,前面的示例会根据消费者何时进行持久订阅而有所不同。

    如果您使用的是非持久主题:
  • T-2 C1 和 C2 正常订阅主题
  • T-1 C1 和 C2 断开
  • T0:M0 已发布
  • T1:M1 已发布
  • T2:C1 连接。 C1 没有收到任何东西
  • T3:发布M3。 C1 收到 M3
  • T4:发布M4。 C1收到M4
  • T5:C2 连接, C2 没有收到任何东西
  • 关于activemq - 虚拟主题/队列和持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019248/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com