关于 Camel 中的 SEDA 组件,有人知道路由器在路由时是否从队列中删除了 Exchange 对象?我的路由器工作正常,但我担心它会将 Exchange 对象保留在队列中,所以我的队列会不断增长......
这是我的路由器:
public class MyRouter extends RouteBuilder {
@Override
public void configure() {
from("seda:input")
.choice()
.when(someValue)
.to("bean:someBean?method=whatever")
.when(anotherValue)
.to("bean:anotherBean?method=whatever");
}
}
如果没有,是否有人知道如何在路由或处理完 Exchange 对象后从队列中删除它(我正在将消息路由到我的应用程序中的一些 bean,它们工作正常,唯一的问题是在队列中)。
另一个问题是,如果我的输入 Exchange 不匹配任何选择条件会发生什么?它是否也保留在队列中?
提前非常感谢。
编辑:阅读克劳斯的回答后,我已将 end() 方法添加到路由器。但是我的问题仍然存在,至少在同时测试 seda 和路由器时是这样。我将一些消息放入队列中,模拟端点(正在接收消息),但每次执行测试时队列都会变满。也许我错过了一些东西。这是我的测试:
@Test
public void test() throws Exception {
setAdviceConditions(); //This method sets the advices for mocking the endpoints
Message message = createMessage("text", "text", "text"); //Body for the Exchange
for (int i = 0; i < 10; i++) {
template.sendBody("seda:aaa?size=10", message);
}
template.sendBody("seda:aaa?size=10", message); //java.lang.IllegalStateException: Queue full
}
谢谢!!
再次编辑:检查我的路由器后,我意识到问题所在,我正在写入与路由器正在读取的端点不同的端点(facepalm)
谢谢克劳斯的回答。