Java 理解apachecamel动态路由

Java 理解apachecamel动态路由,java,apache-camel,Java,Apache Camel,我设置了一个简单的动态路由器: public String slip(String body, @Header(Exchange.SLIP_ENDPOINT) String previous) { if (previous == null) { return "mock:a"; } else if (body.contains("status=

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

    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";
    }
  • 如何通过JavaDSL更新自定义处理器中路由之间的消息体。 exchange.getOut().setBody(newreq)

  • 我是否需要创建一个新的生产者并将消息发送回动态路由器? ProducerTemplate=exchange.getContext().createProducerTemplate(); template.sendBody(mydynamicroutendpoint,newreq); 或者,如果通过方法1,我的路由器将接收新的身体


  • 还是我的逻辑有一个巨大的缺陷

    你可以按照你在1中描述的那样做

    如果您使用bean组件,则更简单。然后,您可以使用普通java方法来读取和设置主体:

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


    这将获得参数中的主体,返回值将是新主体。这也使你的豆子独立于骆驼。

    啊,好的。那很有帮助,谢谢。我必须通过“to(routerEndpoint)”路由回动态路由器吗?或者只要主体更新,camel会自动路由回动态路由器吗?是的,camel会一直调用动态路由器,直到bean返回null。Null是动态路由的信号,表示其已完成。如果您有《骆驼行动》一书的副本,请参阅第8章,其中介绍了此模式,我们在源代码中提供了一些示例,您也可以查看。Apache的文档也有一些内容和示例: