当没有消费者倾听时,发布到虚拟主题的消息会发生什么?经纪人会持有一段时间,直到订户可用吗?
更具体地说: 在T0和T1处,发布消息M0和M1。在T2,消费者C1连接,他会收到M0和M1吗?显然,在T3和T4发布的消息M2和M3将由C1接收,但是在T5连接的新消费者C2将接收什么?所有消息,M2和M3,还是没有?
答案 0 :(得分:4)
这取决于主题的性质: 如果主题是持久的(具有订阅它的持久消费者),则代理将保留主题中的消息,直到所有持久消费者消费消息。 如果主题是非持久的(没有持久消费者),则该消息甚至不会被发送到主题,因为没有持久订阅。
对于您的示例,我将考虑您使用持久订阅/使用者: 案例1:
那是因为他们持有durable subscriptions 使用持久主题/队列时需要非常小心:如果消费者没有取消订阅,代理将保留消息,直到消息存储爆炸。您需要确保不会发生这种情况(通过设置eviction policies和/或在消息上设置生存时间)。 当然,前面的示例将根据消费者进行持久订阅的情况而有所不同。
如果您使用的是非持久性主题:
答案 1 :(得分:1)
允许发布到虚拟主题的消息有两种方法可以使用。第一个是通过持久订阅者,另一个是发布者发送传递模式为“PERSISTENT”的消息。当使用“PERSISTENT”的传送模式发布消息时,消息将保存在磁盘上,否则将保存在内存中。
答案 2 :(得分:0)
为什么不能有观察者/可观察的模式 - 以上面的例子为例:
当发布M0时,C1和C2(消费者订阅)被唤醒并且可以消费该事件?我认为这种模式比耐用和非耐用更好 - 混合方法。