【发布时间】:2013-12-19 14:28:41
【问题描述】:
我有以下 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另一种方式。
我对@987654321@ 的理解是,它只需要交换的主体并将其分解为 2+ 个对象的集合。但我认为这不是我想要的,因为虽然我确实希望 MyPOJO 将其“拆分”成其组成部分 Fizz 和 Buzz 字段,但我希望它们被路由到不同的目的地。也许Fizz 转到direct:fizzFarm 和Buzz 转到direct:buzzFarm。
我对@987654322@ (<choice/>) 的理解是它允许您将条件if-else-if 逻辑添加到路由中。但我也不认为我想要这个,因为我需要的不是有条件的:我总是希望 MyPOJO#Fizz 转到 direct:fizzFarm,并且我总是希望MyPOJO#Buzz 转到direct:buzzFarm。
我对@987654323@ 的理解是,它将动态地将消息路由到不同的目的地,尽管我还不太确定如何。我相信这就是我想要的,但是,从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 路由到不同的目的地)?
【问题讨论】:
标签: java apache-camel routes splitter integration-patterns