3

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

    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 进行,我的路由器是否会拾取新主体。

还是我的逻辑一起存在巨大缺陷?:)

4

1 回答 1

3

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

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

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

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

于 2012-04-04T05:35:36.210 回答