2014-12-20 88 views
0

我有一個問題,我只使用aciveMq交換模式。ExchangeTimedOutException:沒有收到OUT消息

我寫了一個模塊在ServiceMix中運行。它工作正常,除了它發送每個消息到死信隊列(ActiveMQ.DLQ)。如果我檢查消息,則dlqDeliveryFailureCause包含以下消息:java.lang.Throwable:Message Expired。

我查了JMSExpiration = 0

路線:

from("direct:" + reqOutQueue).id("reqInEnritch") 
    .log("Start dispatch") 
    .setExchangePattern(ExchangePattern.InOnly) 
    .recipientList().method(EsbDynamicRouter.class, "systemRoute").parallelProcessing(); 

功能,是什麼給後面的端點列表:

@RecipientList 
public String[] systemRoute(@Body Object body) throws Exception 
{ 
    String[] result = null; 

    List<DispConfView> targetList; 
    int cikl = 0; 
    SystemQueueHelper systemInfo; 
    MessageHeaderHelper msgHeadHelp = new MessageHeaderHelper(body); 

    // The object contains the affected elements 
    targetList = dispHelp.getDispConfByMsgType(msgHeadHelp.getMsgType()); 

    result = new String[targetList.size()]; 

    for (DispConfView element : targetList) 
    { 
     // It builds the target andpoints 
     systemInfo = new SystemQueueHelper(element.getSystemCode(), null, msgHeadHelp.getDirection()); 

     result[cikl] = systemInfo.getQueuName(); 

     cikl++; 
    } 

    return result; 
} 

列表中包含這些值:

activemq:queue:ERP.req.in?exchangePattern=InOnly 
activemq:queue:WF.req.in?exchangePattern=InOnly 

如您所見,我嘗試設置正確的模式,但每條消息都會發送到死信隊列。

請幫助,我必須設置!

謝謝!

+0

我習慣於看到錯誤信息(後面跟着「NNNNN millis」中的單詞),用於「InOut」交換,而不是「InOnly」。所以我要做的第一件事就是確認你是否確實設置了一個'InOnly'交換模式...... – Tim

+0

Hi Tim!你可以檢查我的設置。我想我把所有的輸出都設置爲InOnly,但是如果你有任何其他的想法,我要怎麼設置,請告訴我。我設置了路由交換模式,並設置了收件人列表元素。你知道任何其他地方,我可以在那裏設置它嗎?謝謝! – Feri

回答

1

解決辦法: 正是在context文件設定:

<!-- JMS configuration --> 
<bean id="pooledJmsConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop"> 
    <property name="maxConnections" value="1" /> 
    <property name="connectionFactory" ref="jmsConnectionFactory" /> 
</bean> 

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="failover:(tcp://localhost:61616)" /> 
    <property name="redeliveryPolicy"> 
     <bean class="org.apache.activemq.RedeliveryPolicy"> 
      <property name="maximumRedeliveries" value="5"/> 
     </bean> 
    </property> 
</bean> 

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledJmsConnectionFactory"/> 
    <property name="cacheLevelName" value="CACHE_CONSUMER" /> 
    <property name="disableReplyTo" value="true" /> 
</bean> 

的 「jmsConfig豆 」「 diasbleReplayTo」 屬性解決問題。