Java ApacheCamel:拆分器、CBR还是动态路由器?
我有以下几点建议:Java ApacheCamel:拆分器、CBR还是动态路由器?,java,apache-camel,routes,splitter,integration-patterns,Java,Apache Camel,Routes,Splitter,Integration Patterns,我有以下几点建议: public class MyPOJO { private Fizz fizz; private Buzz buzz; // ctor, getters, setters, etc. } 以及以下路径(SpringXML): 我现在需要一种方法来将MyPOJO实例(在myPOJOFactorybean中创建)拆分为其组成部分Fizz和Buzz属性,并将Fizz以一种方式路由,将Buzz以另一种方式路由 我对a的理解是,它只需要交换主体并将其分解为2
public class MyPOJO {
private Fizz fizz;
private Buzz buzz;
// ctor, getters, setters, etc.
}
以及以下路径(SpringXML):
我现在需要一种方法来将MyPOJO
实例(在myPOJOFactory
bean中创建)拆分为其组成部分Fizz
和Buzz
属性,并将Fizz
以一种方式路由,将Buzz
以另一种方式路由
我对a的理解是,它只需要交换主体并将其分解为2+个对象的集合。但我不认为这是我想要的,因为尽管我确实希望MyPOJO
被“拆分”为其组成的Fizz
和Buzz
字段,但我希望它们被路由到不同的目的地。也许Fizz
会转到direct:fizzFarm
,Buzz
会转到direct:buzzFarm
我对(
)的理解是,它允许您在路由中添加条件if-else-if
逻辑。但我也不认为我想要这个,因为我需要的不是有条件的:我总是希望MyPOJO#Fizz
转到direct:fizzFarm
,我总是希望MyPOJO#Buzz
转到direct:buzzFarm
我对a的理解是,它将动态地将消息路由到不同的目的地,尽管我还不确定如何路由。我相信这就是我想要的,然而,从myPOJOFactory
bean中,交换将包含一个MyPOJO
对象。我觉得在将MyPOJO
发送到动态路由器之前,必须先拆分它。这样,动态路由器将能够清楚地看到消息是嘶嘶声
还是嗡嗡声
,并正确路由
因此,我认为我需要将拆分器与动态路由器结合使用。我只是没能透过树林看到森林。大概是这样的:
<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>
你是对的,因为逻辑总是一样的,路由器可能是杀伤力过大
拆分器通常与相同类型的对象一起使用(例如,拆分列表并分别处理每个项目)
所以我可以建议,像这样的方法应该有效:
from("timer://runOnce?repeatCount=1&delay=10")
.bean(myPOJOFactory.class)
.multicast().to("direct:sendFizz", "direct:sendBuzz")
from("direct:sendFizz")
.setBody(simple("${body.fizz"))
.to("direct:fizzFarm")
from("direct:sendBuzz")
.setBody(simple("${body.buzz"))
.to("direct:buzzFarm")
(这显然是DSL语法,您也可以在XML中尝试。)您是对的,因为逻辑总是相同的,路由器可能会被过度使用
拆分器通常与相同类型的对象一起使用(例如,拆分列表并分别处理每个项目)
所以我可以建议,像这样的方法应该有效:
from("timer://runOnce?repeatCount=1&delay=10")
.bean(myPOJOFactory.class)
.multicast().to("direct:sendFizz", "direct:sendBuzz")
from("direct:sendFizz")
.setBody(simple("${body.fizz"))
.to("direct:fizzFarm")
from("direct:sendBuzz")
.setBody(simple("${body.buzz"))
.to("direct:buzzFarm")
(这显然是DSL语法,您也可以在XML中尝试。)您是对的,因为逻辑总是相同的,路由器可能会被过度使用
拆分器通常与相同类型的对象一起使用(例如,拆分列表并分别处理每个项目)
所以我可以建议,像这样的方法应该有效:
from("timer://runOnce?repeatCount=1&delay=10")
.bean(myPOJOFactory.class)
.multicast().to("direct:sendFizz", "direct:sendBuzz")
from("direct:sendFizz")
.setBody(simple("${body.fizz"))
.to("direct:fizzFarm")
from("direct:sendBuzz")
.setBody(simple("${body.buzz"))
.to("direct:buzzFarm")
(这显然是DSL语法,您也可以在XML中尝试。)您是对的,因为逻辑总是相同的,路由器可能会被过度使用
拆分器通常与相同类型的对象一起使用(例如,拆分列表并分别处理每个项目)
所以我可以建议,像这样的方法应该有效:
from("timer://runOnce?repeatCount=1&delay=10")
.bean(myPOJOFactory.class)
.multicast().to("direct:sendFizz", "direct:sendBuzz")
from("direct:sendFizz")
.setBody(simple("${body.fizz"))
.to("direct:fizzFarm")
from("direct:sendBuzz")
.setBody(simple("${body.buzz"))
.to("direct:buzzFarm")
(这显然是DSL语法,您也可以在XML中尝试它)。非常棒的答案,非常好的建议!这很容易转换为SpringXML,再次感谢!真棒的回答,伟大的建议!这很容易转换为SpringXML,再次感谢!真棒的回答,伟大的建议!这很容易转换为SpringXML,再次感谢!真棒的回答,伟大的建议!这很容易转换为SpringXML,再次感谢!