camel wmq transactions - ack mode as TRANSACTED

时间:2014-08-13 13:39:28

标签: transactions apache-camel ibm-mq

请查看以下情景或骆驼路线

from("wmq:queue:eventQueue + "?useMessageIDAsCorrelationID=true") 
    .transacted() 
    .bean(orchestrator, "processMessage(${body}, ${headers})"); 

并且对于事务我正在维护JmsTransactionManager。请找到相同的。实际上,我已经阅读了“骆驼在行动”一书中的第9章。基于我配置txn。

<bean id="wmq" class="org.apache.camel.component.jms.JmsComponent">
        <property name="transacted" value="true" />
        <property name="transactionManager" ref="txManager" />
</bean>
<bean id="txManager" class="org.springframework.jms.connection.JmsTransactionManager">
        <property name="connectionFactory" ref="wmqConnectionFactory" />
</bean>

现在,在Camel in Action一书的第9章中,作者提到了ACTIVEMQ.DLQ,但是在Websphere MQ的情况下会发生什么。 我的要求是,如果所有processMessage($ {body},$ {headers})都无法处理并抛出异常,则camel不应该确认,并且消息应该存在,因为它在WMQ内部。

请你帮我一下。

由于 萨蒂亚吉特

1 个答案:

答案 0 :(得分:1)

当您处理JMS时,我假设

  

骆驼不应该承认

您希望事务回滚而不是提交。

简单地回滚到WMQ&#34;这是非常有问题的,因为它是&#34;。如果您不采取预防措施,Camel将再次找到该消息并尝试重新处理它。第二次尝试很可能再次失败并重复该过程。日志将很快填满。

你应该指定&#34; BONAME&#34;和&#34; BOTRESH&#34; WMQ队列上的属性,并在几次重试后将回滚消息返回到死信队列。我认为默认的WMQ DLQ是SYSTEM.DEAD.LETTER.QUEUE