ActiveMQ如何将未能发送给消费者的消息保留在队列/ topic上?

Mar*_*chi 3 activemq-classic jms


我仍在学习有关activemq和jms的内容。我已经尝试了一些示例,现在我可以从队列/主题中产生和使用消息。

现在我有一个问题,当我的客户/消费者失去连接时,队列/主题中的消息仍然发送该消息,该消息丢失并且不保留在队列/主题中。所以我的问题是如何保留失败的消息,以及如何使经纪人重新发送该消息?

谢谢

Eri*_*ams 5

您正在混淆一些术语。

除非消息被标记为持久性,否则队列将一直保留消息,直到被消耗或重新启动代理为止,在这种情况下,即使重新启动代理,队列也将一直存在。

主题仅将当前消息传递给任何当前订户。但是,可以使用几种方法来保留发布到主题的消息:

  1. 持久的订户。
  2. 虚拟目的地

虚拟主题在持久订阅者上由于许多原因而趋于流行,但这实际上取决于用例。

创建持久订阅者的方式取决于创建订阅者所使用的内容(Spring,POJO,其他一些API?)。所有方法都会在某个时候调用该Session.createDurableSubscriber方法,但是我建议在通过Virtual Topic或Composite Queue选择它之前,先阅读它们的行为方式。