關於Camel中的SEDA組件,任何人都知道路由器在路由它時是否將Exchange對象從隊列中刪除?我的路由器工作正常,但恐怕它保持在隊列中的交換對象,所以我的隊列將不斷增長......在Camel中讀取和刪除SEDA隊列中的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()方法到路由器。但是我的問題依然存在,至少在一起測試賽達和路由器的時候。我在隊列中放置了一些消息,嘲笑端點(它正在接收消息),但是每次執行測試時隊列都會變滿。也許我錯過了一些東西。這是我的測試:
@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
}
謝謝!!
再次編輯:檢查我的路由器之後,我意識到了這個問題,我在寫一個不同的端點不是一個路由器從(捂臉)
謝謝聖誕老人的回答閱讀。