在项目中,我一直在运行时动态加载 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
。任何建议将不胜感激。
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);
}
扩展现有答案https://stackoverflow.com/a/76809559/7733418让我指出,在
PluginHelp.getResourceLoader
之后,需要启动camelContext,例如,camelContext.start();
。