2011-10-07 83 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