我已經有了一個消息可以生成多個消息的獨立於原始處理的場景。生成多條消息
我已經試過拆分器EIP,但它看起來像它有一個默認的聚合策略(我似乎無法關閉)。
我能實現這個路線:
from("direct:in").to("bean:multipleMsgGenerator").to("direct:out")
其中multipleMsgGenerator可以發送獨立消息的n個 「直接:去」?
謝謝!
我已經有了一個消息可以生成多個消息的獨立於原始處理的場景。生成多條消息
我已經試過拆分器EIP,但它看起來像它有一個默認的聚合策略(我似乎無法關閉)。
我能實現這個路線:
from("direct:in").to("bean:multipleMsgGenerator").to("direct:out")
其中multipleMsgGenerator可以發送獨立消息的n個 「直接:去」?
謝謝!
分割器默認返回原始信息(camel_version> = 2.3)。見http://camel.apache.org/splitter.html。這就是說,你可以做任何你想做的事情與分散的塊內的個別拆分消息。
如果郵件的正文是例如一個列表,你可以這樣做:
from ("direct:in)
.split(body())
.to("direct:processIndividualMsg")
.end()
.to("direct:doSomethingWithTheOriginalMsg");
對於任何人發現這個問題,我們發現了適合我們的解決方案。
我們收到了一條需要傳遞多條消息的消息。這可以使用: 1.一個自定義處理器,它創建一個List並將其設置到交換體中
2.自定義處理器之後的split()。body()
3. Camel Split邏輯需要該列表並通知它是一個項目列表,因此迭代通過它來獲取消息傳遞
(這在駱駝由org.apache.camel.processor.Splitter完成 - > SplitterIterable, 它調用ObjectHelper.createIterator(值))
一些示例代碼:
路線:
from("direct:myRouteEntrypoint")
.to("myProducer")
.split().body()
.to("log:logProducedMessages");
定製生產商:
/**
* MyProducer
*
* Produces a List of String objects and sets that List into the body of
* the message, to then be later "split"
*/
public class MyProducer implements Processor {
public MyProducer() {
}
public void process(final Exchange inExchange) {
List<String> ongoingMessages = new ArrayList<>();
// some loop for each message
for (int i = 0; i < 5; i++) {
String body = "Output message from MyProducer, this is output message: " + i;
body += ", original message body: " + inExchange.getIn().getBody();
ongoingMessages.add(body);
}
inExchange.getIn().setBody(ongoingMessages);
}
}
你可以看到每一個「正在進行的消息」可以訪問啓動它的原始郵件。 如果您運行此代碼並向路由發送一條消息,您將看到5個正在創建的消息併發送到「logProducedMessages」記錄器。
我現在明白了,我嘗試了一下,並更好地理解分離器EIP。謝謝! – user2704553