Camel:根据地图内容路由消息

时间:2017-06-15 17:45:34

标签: java routing apache-camel

目前,我根据JMS消息头字段在Camel中路由消息的代码如下所示:

// MyRouteBuilder.java
@Override
public void configure() {

    from(...)
        .choice()
            .when(header("type").isEqualTo("A"))
                .to("proc_a:1")
            .when(header("type").isEqualTo("B"))
                .to("proc_b:1", "proc_b:2", "proc_b:3")
            .when(header("type").isEqualTo("C"))
                .to("proc_c:1", "proc_c:2")
            .when(...)
                .to(...) // ~15 more branches to follow
            .otherwise()
                .to("proc_default");
}

取决于type标头字段的值,在每种情况下都应使用特定的处理器管道。正如您所看到的,代码不仅重复,而且维护起来也很麻烦。

已经有一个动态创建的Map<String, String[]>,它将类型映射到处理器,例如键B返回["proc_b:1", "proc_b:2", "proc_b:3"]。但是,我不知道如何在上面显示的场景中使用它。

我还读到了dynamic router。但是,给定的示例并没有真正帮助我,我不想通过管理路由逻辑的状态或确保线程安全来增加更多的复杂性。

我很感激任何解决方案。唯一的要求是我坚持使用Camel 2.15并且我不允许调整现有的处理器(这尤其意味着路由逻辑不应该删除任何头字段,因为稍后需要它们)。

1 个答案:

答案 0 :(得分:0)

使用dynamic to(例如toD),您可以使用某种java方法计算要路由到的网址:http://camel.apache.org/how-to-use-a-dynamic-uri-in-to.html以及 dynamic to :{ {3}}