gpt4 book ai didi

java - Apache Camel : Splitter, CBR 还是动态路由器?

转载 作者:行者123 更新时间:2023-12-01 23:20:40 24 4
gpt4 key购买 nike

我有以下 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&amp;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将“ split ”为其组成部分FizzBuzz字段,我希望它们路由到不同的目的地。也许Fizz转到direct:fizzFarmBuzz转到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&amp;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 拆分为 FizzBuzz ,并 #2 设置路由器将 FizzBuzz 路由到不同的目的地)?

最佳答案

你是对的,因为逻辑总是相同的,所以路由器可能有点过分了。

拆分器最常与相同类型的对象一起使用(例如拆分列表并单独处理每个项目)

那么我可以建议 Multicast EIP ,这样的东西应该有效:

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中尝试)。

关于java - Apache Camel : Splitter, CBR 还是动态路由器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com