我已经在ActiveMQ中使用lastImageSubscriptionRecoveryPolicy配置了一个主题。它按预期工作,因为代理保留发送到主题的最后一条消息,当新使用者订阅该主题时,它会收到最后一条消息:
- 生产者发布 N 条消息
- 使用者 A 订阅主题;收到 1 条消息
- 使用者 B 订阅该主题;收到相同的 1 条消息
但是,当我重新启动代理时,该消息会丢失。以下是事件的顺序:
- 生产者发布 N 条消息
- 代理重新启动
- 使用者订阅该主题;未收到任何内容
是否可以启用最后一条消息(最后映像)的持久性,以便即使在代理重新启动后也能持久保存?
不,这是不可能的。 如果需要消息持久性,则需要使用队列,或使用持久主题订阅,以便在重新启动后保留消息。 代理为主题(如恢复策略)提供了一些便利功能,但它们并不能真正替代基于队列的消息传递存在的更强大的保证,因此如果需要,则必须使用这些机制。