apache camel多播和收件人列表模式有什么区别?

时间:2013-11-10 12:47:24

标签: java apache apache-camel multicast

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

在我的代码中,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. 要使multicast()和recipientList()都是concorrent,我必须使用parallelProcessing()。在我的情况下,哪个更有效?

1 个答案:

答案 0 :(得分:11)

  1. 动态路由器用于评估哪些端点在运行时发送特定消息,一次一个端点。 “收件人列表”是一组端点,用于将相同的邮件发送到。
  2. 我建议你阅读Gregor Hohpe和Bobby Woolf的EAI模式,了解一些背景和见解。

    http://www.eaipatterns.com/

    1. 多播允许硬编码的配方列表,recipientList(..)允许在朗姆酒时计算端点。两者都是“recipient lists”。

    2. 如果您没有很多逻辑(比如DB查找)计算收件人列表中的端点,它们可能会同样有效 - 端点的调用可能是Camel最难实现的部分。无论如何 - 静态“多播”更具可读性。

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