我有以下的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
。
我对拆分器的理解是,它只是将交换的主体分解为2个对象的集合。但我不认为这是我想要的,因为尽管我确实希望MyPOJO
被“拆分”成其组成部分Fizz
和Buzz
字段,但我希望将它们路由到不同的目的地。也许菲兹
去导演:嘶嘶声农场
和嗡嗡去
直接:嗡嗡声农场
。
我对基于内容的路由器的理解(
我对动态路由器的理解是,它会动态地将消息路由到不同的目的地,尽管我还不太确定是如何做到的。我相信这就是我想要的,但是,从< code>myPOJOFactory
bean中出来,交换将包含一个< code>MyPOJO对象。我觉得在将< code>MyPOJO发送到动态路由器之前,我必须先将其拆分。这样,动态路由器将能够清楚地看到消息是< code>Fizz还是< code>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
路由到不同的目的地)?
你说得对,因为逻辑总是一样的,路由器可能会过度使用。
拆分器最常用于相同类型的对象(例如,拆分列表并分别处理每个项目)
所以我可以建议多播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试试)。
我使用Camel JPAendpoint来轮询数据库,并将数据复制到第二个数据库。为了不重复轮询,我打算保存复制数据的最高ID,并且只轮询ID高于该ID的数据。 为了节省一些数据库写入,我希望在当前轮询/复制运行结束后写回最高ID,而不是针对每个数据元素。我可以访问骆驼路线类中的元素(及其ID): 现在我想在当前轮询结束后保存。为此,我用自己的自定义方法重写了,在这里我想访问方法中的(在当前轮询完
下面是我试图实现的场景: 谢谢你的帮助。此外,这里是已经工作的FTP部分。
我有一个spring boot应用程序,我正在向其中添加一个camel路由。定义路由的类扩展了FatJarRouter,并用@component注释。当应用程序作为spring boot应用程序运行时,不会识别路由。但是,如果我在主类中使用@SpringBootApplication注释编写路由,则会标识路由。这是它目前在日志中的显示方式: 请告诉我如何在将路由作为一个单独的类而不是在主类中编写时
我有一个Camel route,它使用队列中的消息并将消息存储到数据库中。现在,我想以一种优雅的方式手动关闭运行骆驼路线。我有一个RestEndpoint,每当我需要停止Camel route时就会被触发。此endpoint应停止路由。但是,如果在关闭期间有任何正在运行的消息或事务,则必须在不消耗来自camel route的("")endpoint的任何新消息的情况下成功完成,并在完成正在运行的消
我试图使用Apache Camel Quartz2实现一个调度器,它每分钟执行一次路由,并按预期执行一些任务。我使用spring DSL实现与apache camel相关联的路由,如下所示: 根据日志,它不会记录为路由记录的消息,例如Direct:DomainsWithFTPUsers等等。请指导如何实现同样的目标。
遵循官方文件(https://camel.apache.org/manual/component-dsl.html#_using_component_dsl)我创建了以下代码: 但是中的告诉我: 并且中的特性不建议导入相应的库。 有人能给我指出正确的方向吗? 我必须理解的概念才能做到这一点吗?