我正在研究camel的动态路由器,通过引用http://camel.apache.org/dynamic-router.html
以下是camel config xml:
<route id="dynamicRouter" autoStartup="true">
<from uri="vm://service1?concurrentConsumers=10&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;
}
}
我能够在动态创建的队列中对消息进行排队,但消息会无限排队。
任何帮助确定可能的原因都会有很大的帮助。
提前致谢!!!
答案 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>