Feri
Feri

Reputation: 173

ExchangeTimedOutException: The OUT message was not received

I have a problem the InOnly exchange pattern what I use with aciveMq.

I wrote a module what run in ServiceMix. It works correctly except that it send every message to dead letter queue (ActiveMQ.DLQ). If I check the message then dlqDeliveryFailureCause contains this message: java.lang.Throwable: Message Expired.

I checked the JMSExpiration = 0.

The route:

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

The function, what gives back the endpoint list:

@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;
}

The list contains these values:

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

As you see, I try to set the correct pattern, but every messages go to dead letter queue.

Please help, what I have to set up!

Thank you!

Upvotes: 1

Views: 4187

Answers (1)

Feri
Feri

Reputation: 173

The solution: It is settable in context file:

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

The "jmsConfig bean ""diasbleReplayTo" property solve the problem.

Upvotes: 2

Related Questions