【问题标题】:Create a short lived JMSProducer创建一个短暂的 JMSProducer
【发布时间】:2015-01-08 00:49:44
【问题描述】:

我正在使用 ActiveMQ5.10 和 spring,

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=120000)" />
</bean>

<bean id="jmsConnectionFactory"
    class="org.apache.activemq.pool.PooledConnectionFactory"
    destroy-method="stop">
    <property name="connectionFactory" ref="connectionFactory" />
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <ref local="jmsConnectionFactory" />
    </property>
    <property name="pubSubDomain" value="false" /> 
    <property name="deliveryMode" value="2" /> <!-- 2 implies persistent -->
    <property name="sessionTransacted" value="false" />
    <property name="timeToLive" value="3600000" />
    <property name="explicitQosEnabled" value="true" />
</bean>

我需要创建一个生产者,它将发送一条消息,然后自行停止,然后创建新连接并再次发送消息。

有没有办法做到这一点?

【问题讨论】:

  • 用例是什么?生产者发送一条消息,因此它根本不需要“停止”。只需使用JmsTemplate 发送您的信息,除非我误解了问题,否则您会没事的。
  • 用例是生产者发送消息,然后它应该关闭与 ActiveMQ 代理的连接,1 分钟后(可配置),再次创建连接发送消息并重复此循环。
  • 我还是不明白这个问题。只需使用JmsTemplate 发送您的信息。你试过了吗?
  • (我试过了)。我可以使用 jmstemplate 发送,但之后如何关闭此连接,因为我没有明确创建任何连接。
  • 好吧,您使用的是PooledConnectionFactory,因此它可能会在一段时间内保留与代理的实际连接,但JmsTemplate 的全部意义在于它会正确地为您关闭事物。这个帖子到底是什么?你注意到一个问题了吗?如果是这样,你为什么不在你的帖子中分享它?

标签: spring activemq spring-jms


【解决方案1】:

如果您希望所有生产者和消费者都有这种行为,我认为您可以通过使用非池连接工厂来获得它,因为每条新消息都会导致创建一个新连接,用过,然后拆掉。如果您只希望其中一些具有这种行为,请创建两个连接工厂(一个池化,一个非池化)和两个 JMS 模板(一个使用池化连接工厂,一个不使用),并让客户端使用适当的 JMS 模板。

你的表现可能会很糟糕,但这应该没问题,因为从 cmets 听起来这是一个学术/深奥的问题(即“我只是想看看我是否能找到一种方法来做到这一点,即使我没有必须拥有它的实际理由”)而不是现实世界的理由。

【讨论】:

  • 我希望 some 生产者消费者而不是 all
  • 好的,所以创建两个连接工厂(一个是池化的,一个不是)和两个 JMS 模板(一个使用池化的连接工厂,一个不是),并让客户端使用适当的 JMS 模板...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多