如何强制执行重新传递以取消确认jms消息

时间:2016-01-23 20:34:22

标签: java jms apache-camel

我继续阅读:http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html?page=2

"通常,确认特定消息会确认会话收到的所有先前消息" (在客户确认模式下)

"消息重新传递不是自动的,但在某些情况下会重新传递消息"

我的问题:

  1. 如何每次收到邮件时确保有新的会话(但重复使用连接)?
  2. 如何强制执行未确认消息的重新传递?
  3. 我正在使用此移民:

    <bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"
                lazy-init="true">
                <property name="queueManager" value="${queueManager}" />
                <property name="hostName" value="${hostName}" />
                <property name="transportType" value="${transportType}" />
                <property name="port" value="${port}" />
                <property name="channel" value="${channel}" />
                <property name="SSLCipherSuite" value="${SSLCipherSuite}" />
          </bean>
    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
        <property name="maxConnections" value="10"/>
        <property name="maximumActive" value="100"/>
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
    </bean>
    <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="pooledConnectionFactory"/>
        <property name="transacted" value="false"/>
     </bean>
    
    <bean id="mqNonJmsDestRes" class="calypsox.tk.util.NonJmsMQQueueDestinationResolver" />
    
    <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
          <property name="configuration" ref="jmsConfig" />
           <property name="acknowledgementModeName" value="CLIENT_ACKNOWLEDGE" />
           <property name="destinationResolver" ref="mqNonJmsDestRes" />
     </bean>
    

    我使用camel处理器作为端点bean作为单例

1 个答案:

答案 0 :(得分:0)

您引用的那篇文章是从2002年开始的。从那时起,所有基于MQ的系统都收到了很多工作。在您的AMQ PooledConnectionFactory上,有一些设置可以控制连接在销毁之前的持续时间以及遇到错误时应该怎么做。我推荐阅读一些较新的文档,因为在过去的14年中发生了很多变化。所以有些事情变得容易了。

您还可以检查&#34; org.apache.camel.component.jms.JmsComponent&#34;上的exceptionListener。如果当前选项不适合您的需要,可以配置如何管理例外,甚至编写自己的例外。