如何使用java spring boot应用程序创建持久性JMS消息?

时间:2016-02-01 15:36:22

标签: java spring spring-boot jms activemq

我正在尝试使用此link使用activemq和spring boot创建一个队列,它看起来很好。我无法做的是在应用程序关闭后使此队列持久化。我认为SimpleJmsListenerContainerFactory应该是持久的,但是当我设置factory.setSubscriptionDurable(true)factory.setClientId("someid")时,我无法再接收消息了。我会很高兴任何建议。

2 个答案:

答案 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