【问题标题】:how to make persistent JMS messages with java spring boot application?如何使用 java spring boot 应用程序制作持久的 JMS 消息?
【发布时间】:2016-07-11 02:19:08
【问题描述】:

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

【问题讨论】:

    标签: java spring spring-boot jms activemq


    【解决方案1】:

    我猜您正在将代理嵌入到您的应用程序中。虽然这对于集成测试和概念验证来说是可以的,但您应该考虑在您的基础架构中的某个地方安装一个代理并连接到它。如果您选择了,请参阅 ActiveMQ 文档,您应该没问题。

    如果坚持嵌入,需要提供a brokerUrl that enables message persistence

    话虽如此,您似乎误解了持久订阅者和消息持久性。后者可以通过在某处实际存储队列内容的代理来实现,这样如果代理停止并重新启动,它可以恢复其队列的内容。前者是即使监听者在一段时间内不活跃也能接收到消息。

    【讨论】:

    • 嗯,当我尝试手动创建和注册代理时,它说它已经注册了,因为我认为 Spring Boot 在类路径上找到 activeMQ 时已经注册了。我不知道如何配置它。我阅读的所有信息或示例仅用于 XML 配置,但我想通过注释来做到这一点。
    • 你看过at the configuration at least吗?!您可以使用 brokerUrl 设置一个属性,剩下的交给我们(请参阅我的答案中的 brokerUrl 链接)。该物业是spring.activemq.broker-url
    • 嗯,是的,我不明白那个代理是如何工作的
    【解决方案2】:

    您可以使用 ActiveMQConnectionFactory 启用消息的持久性。

    如您提供的 spring boot 链接中所述,此 ActiveMQConnectionFactory 由 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 2020-09-08
      相关资源
      最近更新 更多