我正在尝试使用此link使用activemq和spring boot创建一个队列,它看起来很好。我无法做的是在应用程序关闭后使此队列持久化。我认为SimpleJmsListenerContainerFactory
应该是持久的,但是当我设置factory.setSubscriptionDurable(true)
和factory.setClientId("someid")
时,我无法再接收消息了。我会很高兴任何建议。
答案 0 :(得分:1)
我猜你是在你的应用程序中嵌入代理。虽然这对于集成测试和概念证明是可行的,但您应该考虑在基础架构中的某个位置安装代理并连接到它。如果您选择,请参阅ActiveMQ文档,您应该没问题。
如果您坚持要嵌入它,则需要提供a brokerUrl
that enables message persistence。
话虽如此,看起来你误解了持久的订阅者和消息持久性。后者可以通过让代理实际存储某个队列的内容来实现,这样如果代理停止并重新启动,它就可以恢复其队列的内容。前者即使听众在一段时间内没有活动也能够接收消息。
答案 1 :(得分:0)
您可以使用ActiveMQConnectionFactory启用消息的持久性。
如您提供的spring boot链接中所述,此SpringMQConnectionFactory由spring boot自动创建。因此您可以在应用程序配置中手动创建此bean,也可以设置各种属性。
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=true");
以下是链接http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html