NMS.ActiveMQ 追溯性消费者
背景
追溯性消费者只是一个普通的 NMS 消费者,它在订阅开始时就指示应该尽一切努力追溯到过去,并发送任何消费者可能错过的旧消息(或该主题上发送的最后一条消息)。
有关更多详细信息,请参阅 订阅恢复策略。
示例
您可以如下标记消费者为追溯性
var topic = session.GetTopic("TEST.Topic?consumer.retroactive=true");
var consumer = session.CreateConsumer(topic);
限制
追溯性消费者在跨代理网络使用时不会始终如一地工作。
在主题的情况下,当我们将代理 A 连接到代理 B 时,代理 B 会将它接收到的所有订阅发送到代理 A。由于代理 A 将消息复制到每个订阅,并且我们想要避免在代理 B 处接收重复的消息,因此我们不能将超过 1 个订阅发送到代理 A 来处理同一个主题。因此,我们的网络桥梁会跟踪跨发送的订阅,并且只将第一个订阅发送到一个主题。后续订阅会增加订阅的引用计数,但订阅实际上并没有发送。
从本质上讲,这就是问题所在。如果第一个主题订阅不是追溯性的,它将从 B 发送到 A,并且 B 代理将不会收到追溯性消息。然后后续订阅可能是(追溯性的),但它不会导致从代理 A 到代理 B 发送追溯性消息,因为后续订阅不会发送到代理 A。