java - Apache Camel 中的动态路由器 URI

标签 java apache-camel

我正在关注“Camel in Action”一书的第 8 章,并使用动态路由器进行测试。我定义了两条路线如下:

from("direct:start")
.dynamicRouter(method(DynamicRouterBean.class, "route"))
.log("dynamicRoute result = ${body}");

from("seda:a")
.log("In direct:a with message ${body}");

在DynamicRouterBean的路由方法中,我实现了如下路由逻辑:

public String route(String body, @Header(Exchange.SLIP_ENDPOINT) String previous) {
    System.out.println("Enter DynamicRouterBean, body=" + body + ", previous=" + previous);
    if (previous == null) {
        return "seda://a";
    } else if ("seda://a".equals(previous)) {
        return "language://simple:Bye ${body}";
    } else {
        // no more, so return null to indicate end of dynamic router
        return null;
    }
}

代码的工作原理与书中描述的一样...但我认识到的问题是,如果我在路由方法中返回端点 URI,中间没有双斜杠“//”,则检查前一个等于“seda:a”的第二个条件将失败,因此动态路由将在那里停止

if (previous == null) {
        return "seda:a";
    } else if ("seda:a".equals(previous)) {
        // This condition will not match... and it will return null
        return "language:simple:Bye ${body}";
    } else {
        // no more, so return null to indicate end of dynamic router
        return null;
    }

这是Camel的DynamicRouter需要在URI中间添加“//”的功能吗?我搜索了这本书或 Camel 官方网站,但似乎没有提到这一点...如果是的话,这背后有什么原因吗?

最佳答案

是的,Camel 中的端点格式为 name://context-path?options 例如,带有双斜杠。因此,如果您将其与书中的内容进行比较。

关于java - Apache Camel 中的动态路由器 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31378154/

相关文章:

java - 我可以使用父类(super class)的类工厂静态方法创建子类实例吗?

java - java中通过IP地址向目的地发送HTTP GET请求

java - Eclipse 中启动进程中的 OutOfMemory

java - Springboot - 使用 Camel 跟踪器创建自己的 Opentracing 范围

java - 在 Apache Camel 中打印异常堆栈跟踪

java - 跟踪谁请求哪些数据的最佳方法?

java - Apache Camel : how to split the file and send to multiple end points

java - 使用 apache camel 从 xml 转换时,'@' 符号出现在输出 json 中

java - Apache Camel 路由中的 Spring Boot 属性使用

java - 我的整个代码已完成,但我无法添加第二个按钮