Apache camel 在运行时从文件加载Apache驼峰路由

Apache camel 在运行时从文件加载Apache驼峰路由,apache-camel,Apache Camel,我试图在运行时从一个文件加载ApacheCamel路由。这意味着 我的“route.yaml”文件如下所示 - route: from: "timer:yaml?period=3s" steps: - set-body: simple: "Timer fired ${header.CamelTimerCounter} times" - to: uri: "log:ya

我试图在运行时从一个文件加载ApacheCamel路由。这意味着

我的“route.yaml”文件如下所示

- route:
    from: "timer:yaml?period=3s"
    steps:
      - set-body:
          simple: "Timer fired ${header.CamelTimerCounter} times"
      - to:
          uri: "log:yaml"
我已经看到,在过去可以执行以下操作来加载路由xml文件,但现在无法执行。例如,我在中看到loadRoutesDefinition


如何使用当前的ApacheCamel?我能够从一个yaml字符串在RouteBuilder中加载它

package org.acme;

import org.apache.camel.CamelContext;
import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.RoutesLoader;
import org.apache.camel.support.ResourceHelper;

public class MyRouteBuilder extends RouteBuilder {

    @Override
    public void configure() {
        CamelContext context = getContext();
        String myRoute = "- route:\n" +
                "    from: \"timer:yaml?period=3s\"\n" +
                "    steps:\n" +
                "      - set-body:\n" +
                "          simple: \"Timer fired ${header.CamelTimerCounter} times\"\n" +
                "      - to:\n" +
                "          uri: \"log:yaml\"\n" +
                "\n";
        try {
            ExtendedCamelContext extendedCamelContext = context.adapt(ExtendedCamelContext.class);
            RoutesLoader loader = extendedCamelContext.getRoutesLoader();
            Resource resource = ResourceHelper.fromString("any.yaml", myRoute);
            loader.loadRoutes(resource);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ExtendedCamelContext提供了一个getRouteLoader方法,该方法有助于加载使用任何支持的DSL编写的路由。稍后我将提供一个示例
package org.acme;

import org.apache.camel.CamelContext;
import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.RoutesLoader;
import org.apache.camel.support.ResourceHelper;

public class MyRouteBuilder extends RouteBuilder {

    @Override
    public void configure() {
        CamelContext context = getContext();
        String myRoute = "- route:\n" +
                "    from: \"timer:yaml?period=3s\"\n" +
                "    steps:\n" +
                "      - set-body:\n" +
                "          simple: \"Timer fired ${header.CamelTimerCounter} times\"\n" +
                "      - to:\n" +
                "          uri: \"log:yaml\"\n" +
                "\n";
        try {
            ExtendedCamelContext extendedCamelContext = context.adapt(ExtendedCamelContext.class);
            RoutesLoader loader = extendedCamelContext.getRoutesLoader();
            Resource resource = ResourceHelper.fromString("any.yaml", myRoute);
            loader.loadRoutes(resource);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}