"热部署"Apache Camel路由和bean类的最佳解决方案是什么?"

3

我们已经使用Apache Camel作为独立应用程序约2年了。它运行得非常好,但每次添加新路由时需要重新启动进程来升级应用程序成为一个问题。

我们正在寻找一种新的部署解决方案,可以允许我们在不必重启主进程的情况下部署新路由。

对于我们来说,重新编写Java DSL路由到XML中没有问题,但问题在于其中大多数(以及可能的未来路由)使用自定义的bean、处理器、组件等注入了一些太复杂而无法用纯XML / Java DSL路由表达的逻辑。

通过搜索Camel文档,似乎可以使用spring-boot或Karaf / OSGI进行XML路由的“热部署”。

但我不知道是否可以“热部署”这些XML路由所需的bean、处理器、组件等类。 OSGI / Karaf看起来很有希望,但我从未使用过这两种技术,而且一开始很难理解它们的目的。

哪种部署方法和哪种技术可以允许我们“热部署”路由和bean类?

2个回答

2
如果你想要热部署Java代码,你需要一个应用服务器平台,比如Apache Karaf/ServiceMix/JBoss Fuse等等,或者是传统的如Tomcat、JBoss、WildFly等等(对于WAR文件)。
然后,你可以将“热部署”作为应用程序的部署来执行。
要在运行的JVM中热部署单个类或一些类更加困难,你需要像JRebel这样的特殊工具才行。

当使用Apache Karaf部署时,路由是否在独立的CamelContext中运行?并且路由能否使用位于“osgi bundle”内的bean类?如果可以,那么Karaf就是答案,因为我们主要关心的是在部署一个路由时不停止其他路由。这些bean类相当特定于路由,因此我们可以在路由之前部署包含用于路由的bean的osgi包,并仅在需要更新包时停止该路由。 - sgt-hartman
你能否更具体地说明如何使Java Bean对于热部署的SpringDSL声明的Camel路由可见?据我所知,每个部署的文件(jar、war、xml)都会被转换为单独的OSGI bundle。而OSGI bundle默认情况下无法访问其他代码,它们应该在清单文件中的导入部分描述所需的包。而XML文件没有任何... - WeGa

2
您可以尝试使用camel-blueprint来设置上下文/路由。 通过将您的bean公开为OSGi服务,您可以在路由中使用这些bean。 我建议您先查看Apache Camel Blueprint Maven原型和Camel组件原型以开始工作。
在Apache Karaf中进行热部署很简单,只需将bundle放入$KARAF_HOME/deploy中,它将自动重新加载。
参考链接: camel-archetype-component camel-archetype-blueprint 如果有帮助,请告诉我。
附注:我没有足够的声望来评论,因此是回答。

好的,这似乎证实了我对于Apache Karaf/OSGI的想法。谢谢! - sgt-hartman
你可能需要阅读一些关于Karaf及其特性生态系统的材料,以避免在部署过程中出现任何问题。 - ST. Kee
当然可以。在深入研究之前,我需要先验证这项技术是否符合我们的需求。 - sgt-hartman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接