1

活动MQ 5.5.1

<c:route>
    <c:from uri="jetty:http://0.0.0.0:8055/ws/despacho" />
    <c:to uri="bean:despachoHandler" />
    <c:to uri="activemq:queue:copom.out.test" pattern="InOut" />
</c:route>

该消息出现在队列中,但我无法使用它。一段时间后,我得到了超时,消息转到 ActiveMQ.DLQ。

org.apache.camel.ExchangeTimedOutException:未收到 OUT 消息:20000 毫秒到期回复消息,相关 ID:Camel-ID-SSP-SGPF-GITSAD-58215-1359134232568-0-3 未收到。

如果我将其更改为pattern="InOnly"我可以正常使用该消息。

这是怎么回事?

4

2 回答 2

12

您应该学习 EIP 模式。

使用 InOut 时,您正在执行请求-回复 EIP 模式 http://camel.apache.org/request-reply.html

在这种情况下,一条消息被发送到一个 JMS 队列,并且当您执行 InOut 时,一个回复消息应该被发送回 JMSReply 属性中定义的队列(如果没有,Camel 将设置为一个临时队列名称)否则显式设置)。

如果 20 秒后没有回复消息,Camel 会因超时异常而失败。您可以配置超时的长度。

所以你必须决定你是在做请求回复 EIP (InOut) 还是事件消息 (InOnly) http://camel.apache.org/event-message.html

于 2013-01-25T18:00:00.817 回答
0

当 JMSCorrelationID= 设置我们的系统并且 Camel in/out 无法接收来自请求回复队列的响应时,我们遇到了类似的问题。在删除由我们的代码设置的 JMSCorrelationID= 后,Camel 开始运行,成功接收来自请求回复队列的消息。

于 2018-09-17T12:56:44.083 回答