ActiveMQ Тайм-аут запроса-ответа - PullRequest
0 голосов
/ 07 октября 2011

У меня есть проблема activeMQ, когда я отправляю запрос удаленному брокеру (из приложения Camel). См. Конфигурацию ниже:

<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>

Всякий раз, когда я проверяю очередь «providerResponse» на удаленном посреднике, я понимаю, что сообщение resposne никогда не принимается. это остается в сообщении, даже если я попросил, чтобы ответные сообщения были в очереди там (что фактически было сделано).

Мой вопрос: почему верблюд отказывается получать это сообщение из этой очереди? Обратите внимание, что шаблон Exchange был явно установлен на InOut.

Я заметил, что CorrelationID не совпадают, хотя я проверяю JMSCorrelationID для запроса и ответа, которые для меня выглядят одинаково.

Есть ли альтернативный селектор, который я могу использовать для сопоставления ответа JMS на запрос / ответ?

1 Ответ

0 голосов
/ 09 ноября 2011

Вместо использования <to ref="providerEndpoint"/> попробуйте <inOut ref="providerEndpoint"/>.Если вы опустите параметр replyTo в URI, Camel создаст временную очередь, которая будет использоваться только для этого ответа.

...