【问题标题】:What is the difference between apache camel multicast and recipent-list patterns?apache骆驼多播和收件人列表模式有什么区别?
【发布时间】:2013-11-10 12:47:24
【问题描述】:

所以,在阅读了一些文档并在这里得到了你们的很多帮助之后,我终于实现了一个动态选择端点的收件人列表(动态收件人列表):

在我的代码中,MainApp_A 每 10 秒生成一次报告,我希望它同时将报告发送到所有服务器,而不是一一进行。因此我开发了以下路线。

MainApp_A

main.addRouteBuilder(new RouteBuilder(){
    @Override
        public void configure() throws Exception {
            from("direct:start").multicast().parallelProcessing()
                .beanRef("recipientListBean", "route").end()
            .log("${body}");
        }
});

RecipientListBean

@RecipientList
public Set<String> route(String body) {
        return servers; //returns a collection of several severs
}

我还查看了多播模式和动态路由的文档:

现在我有几个问题,我很困惑。所以我有几个问题:

  1. 接收者动态列表是否只是多播模式与动态路由模式的结合点?
  2. 单独的 multicast() 调用是纯顺序的,对吗?使用 multicast() 和 recipientList() 有什么区别?
  3. 为了使多播() 和收件人列表() 一致,我必须使用parallelProcessing()。就我而言,哪个更有效?

【问题讨论】:

    标签: java apache apache-camel multicast


    【解决方案1】:
    1. 动态路由器用于评估在运行时将特定消息发送到哪些端点,一次一个端点。收件人列表是一组用于向其发送相同消息的端点。

    我建议您阅读 Gregor Hohpe 和 Bobby Woolf 的 EAI 模式,了解一些背景和见解。

    http://www.eaipatterns.com/

    1. 多播允许硬编码收件人列表,recipientList(..) 允许在运行时计算端点。两者都是“recipient lists”。

    2. 如果您没有大量逻辑(例如数据库查找)来计算收件人列表中的端点,它们可能同样有效 - 端点的调用可能是迄今为止 Camel 最难的部分.无论如何 - 静态“多播”更具可读性。

    在 Camel 中,选择一个结构而不是另一个结构的原因通常是路线的可读性。您应该能够查看路线并遵循它的功能(假设您知道 EIP)。至少,这是一个很好的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2017-05-19
      • 2016-12-21
      • 2014-01-16
      相关资源
      最近更新 更多