我有以下POJO:Apache Camel:分離器,CBR或動態路由器?
public class MyPOJO {
private Fizz fizz;
private Buzz buzz;
// ctor, getters, setters, etc.
}
而下面的路線(春季XML):
<route id="myroute">
<from uri="timer://runOnce?repeatCount=1&delay=10" />
<to uri="bean:myPOJOFactory?method=newMyPOJO" />
<!-- Not sure what to do here -->
<!-- MyPOJO#Fizz should get routed to direct:fizzFarm. -->
<!-- MyPOJO#Buzz should get routed to direct:buzzFarm. -->
</route>
其中myPOJOFactory
是:
public class MyPOJOFactory {
public MyPOJO newMyPOJO(Exchange exchange) {
Fizz fizz = new Fizz(true, 3);
Buzz buzz = new Buzz("awesome");
MyPOJO pojo = new MyPOJO(fizz, buzz);
exchange.getOut().setBody(pojo);
}
}
我需要一種方法現在被MyPOJO
實例(在myPOJOFactory
bean內部創建)納入其組成部分Fizz
和Buzz
屬性,並且路線Fizz
單程,而Buzz
另一種方式。
我理解Splitter的是,它只是需要交換的身體,將其分解成2+對象的集合。但我不認爲這是我想要的,因爲雖然我確實希望MyPOJO
可以「拆分」到其組成部分Fizz
和Buzz
字段中,但我希望將它們路由到不同的目的地。也許Fizz
轉到direct:fizzFarm
和Buzz
轉到direct:buzzFarm
。
我理解的Content-Based Router(<choice/>
)是,它允許你添加條件if-else-if
邏輯到線路。但我不認爲我想這是因爲我需要的是不是有條件的:我總是希望MyPOJO#Fizz
去direct:fizzFarm
,我總是想的MyPOJO#Buzz
去direct:buzzFarm
。
我的瞭解的一個Dynamic Router是它會動態路由消息到不同的目的地,雖然我現在還不太確定。我相信這是我想要的,但是,出來的myPOJOFactory
bean,交換將包含一個MyPOJO
對象。我覺得我必須在將它發送到動態路由器之前首先拆分MyPOJO
。這樣,動態路由器將能夠清楚地看到該消息是否爲Fizz
或Buzz
,並且路由正確。
所以我相信我需要與動態路由器結合使用分離器。我只是沒有看到樹林裏的森林。事情是這樣的:
<route id="myroute">
<from uri="timer://runOnce?repeatCount=1&delay=10" />
<to uri="bean:myPOJOFactory?method=newMyPOJO" />
<split>
<tokenize token="Somehow split MyPOJO into Fizz and Buzz here" />
<to uri="direct:dynrouter" />
</split>
<from uri="direct:dynrouter" />
<dynamicRouter>
<!-- ??? Somehow route Fizz to direct:fizzFarm, and Buzz to direct:buzzFarm
</dynamicRouter>
</route>
任何想法,我怎麼能做到這一點(#1分割成MyPOJO
和Fizz
Buzz
和#2設置路由器的路由Fizz
和Buzz
到不同的目的地)?提前致謝!
真棒回答,很好的建議!這很容易轉換成Spring XML,再次感謝! – IAmYourFaja
不客氣隊友:) – vikingsteve