我有以下 POJO:
public class MyPOJO {
private Fizz fizz;
private Buzz buzz;
// ctor, getters, setters, etc.
}
以及以下路线(Spring 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
我对基于内容的路由器( <choice/>
) 的理解是,它允许您将条件if-else-if
逻辑添加到路由中。但我也不认为我想要这个,因为我需要的不是有条件的:我总是想要MyPOJO#Fizz
去direct:fizzFarm
,而且我总是想要MyPOJO#Buzz
去direct:buzzFarm
。
我对动态路由器的理解是它将消息动态地路由到不同的目的地,尽管我不太确定如何。我相信这就是我想要的,但是,从myPOJOFactory
bean 中出来,交换将包含一个MyPOJO
对象。我觉得MyPOJO
在将其发送到动态路由器之前,我必须先拆分它。这样,动态路由器将能够清楚地看到消息是 aFizz
还是 a 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
and Buzz
,#2 设置路由器以路由Fizz
到Buzz
不同的目的地)?