Apache camel 重新交付延迟设置不适用';不要在ActiveMQXAConnectionFactory上工作
我一直在尝试在我的camel上下文(camel 2.8)中配置jms端点(activemq 5.7),以便在回滚时使用消息的重新传递。不幸的是,它并没有像我预期的那样工作:它将消息返回到队列,但是消费者接收消息,尽管之后立即指定了延迟参数 我的配置如下:Apache camel 重新交付延迟设置不适用';不要在ActiveMQXAConnectionFactory上工作,apache-camel,activemq,apache-servicemix,Apache Camel,Activemq,Apache Servicemix,我一直在尝试在我的camel上下文(camel 2.8)中配置jms端点(activemq 5.7),以便在回滚时使用消息的重新传递。不幸的是,它并没有像我预期的那样工作:它将消息返回到队列,但是消费者接收消息,尽管之后立即指定了延迟参数 我的配置如下: ... <bean id="jmstx" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="configur
...
<bean id="jmstx" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsTxConfig" />
</bean>
<bean id="jmsTxConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="jmsXaPoolConnectionFactory"/>
<property name="transactionManager" ref="osgiPlatformTransactionManager"/>
<property name="transacted" value="false"/>
<property name="cacheLevelName" value="CACHE_NONE"/>
<property name="concurrentConsumers" value="${jms.concurrentConsumers}" />
</bean>
<bean id="jmsXaPoolConnectionFactory" class="org.apache.activemq.pool.XaPooledConnectionFactory">
<property name="maxConnections" value="${jms.maxConnections}" />
<property name="connectionFactory" ref="jmsXaConnectionFactory" />
<property name="transactionManager" ref="osgiJtaTransactionManager" />
</bean>
<bean id="jmsXaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
<property name="brokerURL" value="${jms.broker.url}"/>
<property name="redeliveryPolicy">
<bean class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="-1"/>
<property name="initialRedeliveryDelay" value="2000" />
<property name="redeliveryDelay" value="5000" />
</bean>
</property>
</bean>
。。。
演示如何使用端点的小示例:
<route id="main-route">
<from uri="jmstx:queue:my-queue" />
<to uri="direct:subroute" />
...
<!-- some logic -->
</route>
<route id="subroute">
<from uri="direct:subroute" />
<transacted ref="PROPAGATION_MANDATORY"/>
...
<!-- Rollback on some condition -->
<rollback/>
...
</route>
...
...
...
有人知道为什么会这样吗?
谢谢。是的,我遇到了同样的问题。 在破解ActiveMQ源代码并添加一些日志信息后,我找到了一些证据并用谷歌搜索解决方案 正如答案所说: 在activemq组件上将cacheLevel设置为CACHE_CONSUMER后,解决了该问题 例:
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="jmsPooledConnectionFactory" />
<property name="concurrentConsumers" value="1"/>
<property name="transacted" value="true"/>
<property name="cacheLevelName" value="CACHE_CONSUMER"/>
<property name="acknowledgementModeName" value="SESSION_TRANSACTED"/>
</bean>