Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Camel中两个源的消息按时间顺序排队_Java_Apache Camel_Esb_Jbossfuse - Fatal编程技术网

Java Apache Camel中两个源的消息按时间顺序排队

Java Apache Camel中两个源的消息按时间顺序排队,java,apache-camel,esb,jbossfuse,Java,Apache Camel,Esb,Jbossfuse,我想在Apache Camel(包含在JBoss Fuse中)中实现下一个场景: 我有两个系统,它们都分别生成存储在数据库中的事件。现在我需要从这个事件表中读取事件,并将它们作为消息放入队列(由ActiveMQ实现)。但真正重要的是,我需要保持队列中事件的时间顺序(创建时间),不管事件是在哪里创建的 我正在寻找最大限度地使用Camel框架中的组件和模式的解决方案,当然我可以在Camel(纯Java)之外实现读取机制,但我更喜欢Camel解决方案 非常感谢你的建议 我认为您只需要将消息弹出到sed

我想在Apache Camel(包含在JBoss Fuse中)中实现下一个场景:

我有两个系统,它们都分别生成存储在数据库中的事件。现在我需要从这个事件表中读取事件,并将它们作为消息放入队列(由ActiveMQ实现)。但真正重要的是,我需要保持队列中事件的时间顺序(创建时间),不管事件是在哪里创建的

我正在寻找最大限度地使用Camel框架中的组件和模式的解决方案,当然我可以在Camel(纯Java)之外实现读取机制,但我更喜欢Camel解决方案


非常感谢你的建议

我认为您只需要将消息弹出到
seda
队列中,然后使用
重新排序器将它们重新排序

from("--database1--")
    to("seda:resequencer")

from("--database2--")
    to("seda:resequencer")

from("seda:resequencer")
    .resequence(header("date")).batch().timeout(5000L)
    .to("activemq:...")
您需要注意超时设置和适当的设置


(注意:我还没有测试过这段代码,所以请将其作为一个建议)。

这似乎是一个可行的解决方案,当一个(或两个)数据库不可用时,是否可以检测(停止)处理消息?我的意思是,当其中一个关闭时,如果我可以停止传递第二个数据库的消息。当然,我认为您可以使用
onException
转到一个新的路由,然后使用
controlBus
停止另一个数据库路由,或者更简单地说,只需在两个路由的过滤器中使用的bean上设置布尔
keepProcessing
标志。+最后一点,不确定是否需要
seda:resequencer
,是否值得先尝试
direct:resequencer