【问题标题】:Understanding Apache Camel Dynamic Routing了解 Apache Camel 动态路由
【发布时间】:2012-04-04 13:35:36
【问题描述】:

我已经设置了一个简单的动态路由器:

    public String slip(String body, @Header(Exchange.SLIP_ENDPOINT) String previous) {
                if (previous == null) {
                    return "mock:a";
                } 
                    else if (body.contains("status=2") ) {
                    return "mock:b";
                }
                    else if (body.contains("status=3") ) {
                    return "mock:c";
                }

                // no more so return null
                return null;
            }

模拟 a、b、c 是带有自定义处理器的路由。

public void process(Exchange exchange) throws Exception {
        String str_request = "";
        String str_requestNew = "";

        str_request = (String) exchange.getIn().getBody();

        if(str_request.contains("status=1"))
            str_requestNew = "status=2";
    }
  1. 如何通过 Java DSL 在我的自定义处理器中更新路由之间的消息正文。 exchange.getOut().setBody(newreq); ?

  2. 我是否需要创建一个新的生产者并将消息发送回动态路由器? ProducerTemplate 模板 = exchange.getContext().createProducerTemplate(); 模板.sendBody(myDynamicRouterEndpoint, newreq); 或者如果通过方法 1 进行,我的路由器是否会接收新的主体。

或者我的逻辑有一个巨大的缺陷? :)

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    你可以像你在 1 中描述的那样做。

    如果使用 bean 组件就更简单了。然后你可以有一个普通的java方法来读取和设置body:

    公共字符串doSomething(字符串体){ }

    这将获取参数中的主体,返回值将是新的主体。这也使您的 bean 独立于 Camel。

    【讨论】:

    • 嗯,好的。这很有帮助,谢谢。我是否必须通过“to(routerEndpoint)”路由回动态路由器,或者只要更新主体,camel 会自动执行此操作?
    • 是的,Camel 一直调用动态路由器,直到您的 bean 返回 null。 Null 是动态路由的信号,它已完成。如果你有 Camel in Action 这本书的副本,那么请参阅第 8 章,其中介绍了这种模式,并且我们在源代码中提供了许多示例,你也可以查看。 Apache 的文档也有一些覆盖和示例:camel.apache.org/dynamic-router
    猜你喜欢
    • 2018-07-01
    • 2021-08-26
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多