在运行时加载 apache 骆驼路由

问题描述 投票:0回答:2

在项目中,我一直在运行时动态加载 Apache Camel 路由。 当前环境包括

Spring 2.7.4, Apache Camel 3.18.0, and JDK 17

private void fromFile(final Path filepath) throws Exception {
    final byte[] routeDefinitionBytes = Files.readAllBytes(filepath);
    final Resource resource = ResourceHelper.fromBytes(filepath.toString(), routeDefinitionBytes);
    final ExtendedCamelContext extendedCamelContext = camelContext.adapt(ExtendedCamelContext.class);
    extendedCamelContext.getRoutesLoader().loadRoutes(resource);
}

现在迁移项目以使用

Apache Camel 4.0.0-RC1
Spring Boot 3.1.1
,并继续使用
JDK 17
。面临的问题是,adapt() 方法在较新版本的 Apache Camel 中不可用,导致现有代码无法运行。

我正在寻找一个可行的解决方案,它可以让我继续从文件中读取路由定义,并在运行时将它们注入到 Apache Camel 上下文中

Apache Camel 4.0.0-RC1
。任何建议将不胜感激。

apache-camel java-17 spring-boot-3
2个回答
0
投票

对于这样的需求,你可以依赖实用方法

PluginHelper#getRoutesLoader(CamelContext)
,但在幕后,新的逻辑是在camel上下文上调用
getCamelContextExtension()
来获取
ExtendedCamelContext
,然后获取你想要的插件使用感谢方法
ExtendedCamelContext#getContextPlugin(Class)

所以你的代码将是:

private void fromFile(final Path filepath) throws Exception {
    final byte[] routeDefinitionBytes = Files.readAllBytes(filepath);
    final Resource resource = ResourceHelper.fromBytes(
        filepath.toString(), routeDefinitionBytes
    );
    PluginHelper.getRoutesLoader(camelContext).loadRoutes(resource);
}

0
投票

扩展现有答案https://stackoverflow.com/a/76809559/7733418让我指出,在

PluginHelp.getResourceLoader
之后,需要启动camelContext,例如,
camelContext.start();

© www.soinside.com 2019 - 2024. All rights reserved.