我刚刚开始使用activemq,我对追溯消费者有疑问,为了启用此功能,您需要持久订阅。但是,在主题上启用和不启用追溯的持久订阅有什么区别? activemq doc说。
http://activemq.apache.org/retroactive-consumer.html 追溯消费者只是一个常规的JMS主题消费者,它表示在订阅开始时,应该使用每次尝试来回溯并发送消费者可能错过的任何旧消息(或该主题上发送的最后消息)
关于追溯消费者。对于持久订阅者:
http://activemq.apache.org/how-do-durable-queues-and-topics-work.html ...因此,对于持久主题订阅,JMS提供程序需要能够在关闭时识别S,并在以后重新连接时识别它,以便它可以知道在它未运行时要发送给它的消息
我确实看到有和没有追溯模式的持久订阅之间存在任何重大差异。
请解释谢谢。
答案 0 :(得分:3)
retroactive consumer实际上不是您使用持久订阅执行的操作。持久主题订阅者将发送给他们的所有消息标记为持久保存在DB中,直到下次连接然后调度这些消息为止。
对于非持久主题订阅,您可以配置subscription recovery policy并将消费者标记为追溯标记。当消费者连接时,代理将根据您配置的恢复策略将内存中的任何主题消息发送给消费者。
因此,如果您使用的是持久订阅,请不要在追溯事物上乱搞,因为没有必要。并且不要指望追溯消费者始终工作,因为它只对存储在内存中的消息进行操作,因此如果经纪人重新启动,则无需恢复。
在许多情况下,更好的选择是使用Virtual Topics,因为这将为每个消费者分配一个队列,消息将存储在队列中,即使消费者离线一点也是如此。