camel中的动态路由无限地使消息入队

时间:2014-08-13 07:57:32

标签: spring apache-camel activemq


我正在研究camel的动态路由器,通过引用http://camel.apache.org/dynamic-router.html

来派生和发送到相关队列

以下是camel config xml:

<route id="dynamicRouter" autoStartup="true">
    <from uri="vm://service1?concurrentConsumers=10&amp;timeout=0" />
    <choice>
        <when>
            <simple>${body.documentStatus} == 'SUCCESS' </simple>
            <log message="routing to dynamic router" />
            <dynamicRouter>
            <!-- use a method call on a bean as dynamic router -->
            <method ref="messageRouter" method="route" />
            </dynamicRouter>
        </when>
    </choice>
</route>

以下是我的动态路由器bean:

public class MessageRouter {

private static final String QUEUE_BROKER = "activemq"; 
private static final String DEFAULT_QUEUE = "queue"; 
/**
 * 
 * @param obj
 *            message
 * @return the dynamically generated queue name
 */ 
public String route(ServiceObject obj) {
    RecordObject record = obj.getRecordObject();

    if(record != null){
        return QUEUE_BROKER + ":" 
                + record.getId() + "." + DEFAULT_QUEUE; 
    }
    return null; 
}

}

我能够在动态创建的队列中对消息进行排队,但消息会无限排队。
任何帮助确定可能的原因都会有很大的帮助。

提前致谢!!!

1 个答案:

答案 0 :(得分:3)

阅读

上有关动态路由器的文档

请注意提示框,它说该方法必须返回null以向动态路由器发出信号以便突破。

所以在上面的代码中,然后是这段代码

RecordObject record = obj.getRecordObject();

... record对象永远不会null,因此动态路由器会永远继续前进。

如果您只想要一次动态路由 ,请使用动态收据列表eip,参见

你的xml路线是

<recipientList>
<!-- use a method call on a bean as dynamic router -->
<method ref="messageRouter" method="route" />
</recipientList>