Jms ActiveMQ-我无法使用InOut模式使用Camel发送的消息

Jms ActiveMQ-我无法使用InOut模式使用Camel发送的消息,jms,activemq,apache-camel,Jms,Activemq,Apache Camel,ActiveMQ 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 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毫秒内收到correlationID为的到期回复消息: 未收到Camel-ID-SSP-SGPF-GITSAD-58215-1359134232568-0-3

如果我将其更改为pattern=ino,则我只能正常使用该消息


发生了什么事?

您应该学习EIP模式

当使用InOut时,您正在执行请求-应答EIP模式

在本例中,一条消息被发送到JMS队列,并且正如您在InOut中所做的那样,一条回复消息将被发送回JMSReply属性中定义的队列,如果没有显式设置,该属性将被设置为临时队列名

如果20秒后没有回复消息返回,Camel将失败并出现超时异常。您可以配置超时的长度

因此,您必须决定是执行请求-回复EIP InOut还是执行事件消息inoOnly
您应该学习EIP模式

当使用InOut时,您正在执行请求-应答EIP模式

在本例中,一条消息被发送到JMS队列,并且正如您在InOut中所做的那样,一条回复消息将被发送回JMSReply属性中定义的队列,如果没有显式设置,该属性将被设置为临时队列名

如果20秒后没有回复消息返回,Camel将失败并出现超时异常。您可以配置超时的长度

因此,您必须决定是执行请求-回复EIP InOut还是执行事件消息inoOnly

当系统设置JMSCorrelationID=时,我们遇到了类似的问题,Camel in/out无法从请求-应答队列接收响应。
在删除代码设置的JMSCorrelationID=后,Camel开始成功地从请求-应答队列接收消息。当系统设置JMSCorrelationID=且Camel in/out无法从请求-应答队列接收响应时,我们遇到了类似的问题。 在删除代码设置的JMSCorrelationID=后,Camel将开始成功地从请求-应答队列接收消息