【问题标题】:Queue for messages from two sources in Apache Camel with chronological order在 Apache Camel 中按时间顺序排列来自两个源的消息
【发布时间】:2015-02-27 17:36:46
【问题描述】:

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

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

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

非常感谢您的任何想法!

【问题讨论】:

    标签: java apache-camel esb jbossfuse


    【解决方案1】:

    我认为您只想将消息弹出到 seda 队列并使用 resequencer 将它们合并回顺序。

    from("--database1--")
        to("seda:resequencer")
    
    from("--database2--")
        to("seda:resequencer")
    
    from("seda:resequencer")
        .resequence(header("date")).batch().timeout(5000L)
        .to("activemq:...")
    

    您需要注意超时设置和适当的设置。

    (注意:我没有测试过这段代码,所以请把它标记为建议)。

    【讨论】:

    • 这似乎是一个可行的解决方案,当一个(或两个)数据库不可用时,是否可以检测(停止)处理消息?我的意思是,当其中一个出现故障时,如果我可以停止传递来自第二个的消息。
    • 当然,我认为您可以使用onException 转到一条新路线,然后使用controlBus 停止另一个数据库路线,或者更简单地设置一个布尔值@987654326在两个路由的过滤器中使用的 bean 上的 @ 标志。
    • +最后一点,不确定seda:resequencer是否必要,值得先尝试direct:resequencer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2016-03-20
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多