2011-10-07 84 views
0

我有这个activeMQ问题,我发送请求到远程代理(来自骆驼应用程序)。请参见下面的配置:ActiveMQ请求 - 回复超时

<bean id="providerJMSConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="alwaysSessionAsync" value="false"/> 
    <property name="alwaysSyncSend" value="true"/> 
    <property name="brokerURL"><value>${remote-broker-url}</value></property> 
    <property name="clientID" value=""/> 
    <property name="closeTimeout" value="150000"/> 
    <property name="copyMessageOnSend" value="true"/> 
    <property name="disableTimeStampsByDefault" value="false"/> 
    <property name="dispatchAsync" value="false"/> 
    <property name="objectMessageSerializationDefered" value="false"/> 
    <property name="optimizeAcknowledge" value="true"/> 
    <property name="optimizedMessageDispatch" value="true"/> 
    <property name="password" value=""/> 
    <property name="producerWindowSize" value="0"/> 
    <property name="statsEnabled" value="false"/> 
    <property name="useAsyncSend" value="false"/> 
    <property name="useCompression" value="false"/> 
    <property name="useRetroactiveConsumer" value="false"/> 
    <property name="userName" value=""/> 
    <property name="watchTopicAdvisories" value="true"/> 
    <property name="sendTimeout" value="0"/> 
</bean> 

<bean id="aeroProviderJMSConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="providerJMSConnectionFactory"/> 
    <property name="deliveryPersistent" value="true"/> 
    <property name="explicitQosEnabled" value="true"/>  
    <property name="priority" value="${jms-message-priority}"/> 
    <property name="acceptMessagesWhileStopping" value="false"/>  
</bean> 
<bean id="providerJMS" class="org.apache.camel.component.jms.JmsComponent"> 
    <property name="configuration" ref="providerJMSConfig"/>   
</bean> 

<osgi:camelContext xmlns="http://camel.apache.org/schema/spring" trace="true"> 
    <endpoint id="providerEndpoint" uri="providerJMS:queue:provider?replyTo=providerResponse&requestTimeout=120000"/> 
     <route> 
    <from .....> 
    <to ref="providerEndpoint"/> 
    .... 
    </route> 

每当我检查远程代理的“提供商响应”队列中,我意识到resposne邮件永远不会回升。它仍然在消息中,即使我已经要求响应消息在那里排队(实际上已经完成)。

我的问题是,为什么骆驼会拒绝从这个队列中得到这个消息? 请注意,Exchange模式已明确设置为InOut。

我注意到它说CorrelationID是不一样的,即使我检查JMSCorrelationID的请求和对我来说看起来相同的响应。

是否有替代选择器可用于匹配JMS请求/回复响应?

回答

0

而不是使用<to ref="providerEndpoint"/>尝试<inOut ref="providerEndpoint"/>。如果您忽略URI上的replyTo参数,Camel将创建仅用于该响应的临时队列。

+0

我试过了,我仍然有同样的结果。 – Lekkie

+0

您可以通过JMX将jconsole或visualvm连接到该ActiveMQ实例,浏览队列并将其中一条消息的副本粘贴到此线程中? –

+0

BooleanProperties: ByteProperties DoubleProperties FloatProperties IntProperties JMS相关ID:ID-WEBESBSTAGING-3245-1321373681481-1-51 JMSDeliveryMode:PERSISTENT JMSDestination:队列:// aeroReply JMSExpiration:0 JMSMessageID按:ID:TestESB- 1233-1321373526837-24:1:18:254:1 JMSPriority:9 JMSRedelivered:假 JMSReplyTo:队列://回复 JMSTimestamp:星期二年11月15 20时02分40秒GMT + 01:00 2011 的JMSType:空 JMSXGroupID:null JMSXGroupSeq:0 LongProperties: OriginalDestination: PropertiesText: ShortProperties: StringProperties: 文本:<?XML版本= “1.0”> – Lekkie