什么是用Camel编写的集成/管道系统的最佳容器



我知道这个问题很笼统,答案过于偏向于目标系统的规模、范围、类型等。因此,实际上我想知道使用各种容器(如spring-bootsingle-mainkaraf等)的优缺点,以及我应该在何时/为什么为这样的系统使用容器。

在我们之前的项目中,我的同事使用了apacha-karaf,但他们遇到了很多麻烦,比如构建项目、设置允许组件导出jmx、糟糕的文档等。由于当前系统是基于弹簧的应用程序,使用spring-boot可能更有意义。有什么想法吗?

您必须问的主要问题是您对的要求是什么:

  1. 您需要支持多少集成(micro?)服务
  2. 您是否需要支持这些服务的独立配置
  3. 您是否需要支持这些服务的独立分支/版本控制
  4. 您是否需要对这些服务进行"热部署"(即部署/更新/重新配置一个服务不会固有地影响其他服务的运行)

如果答案是肯定的,那么你有两个主要的选择:

  1. 采用JBoss Fuse方式(Apache Karaf的RedHat品牌版本)。这意味着您的每个集成(微)服务都将是Fuse中的OSGi捆绑包
  2. 使用非OSGi容器,但在这种情况下,为了满足您的需求,您需要管理服务生命周期的另一层。例如,您可以查看Fabric8(https://fabric8.io/)

这意味着理想情况下,每个Docker容器将有一个(微)服务(而不是每个OSGi捆绑包一个微服务),Fabric8将为您提供Web UI(以及许多其他工具,如Kubernetes命令、maven命令),以管理将服务部署到Docker容器。因此,一个服务可能使用spring-boot/tomcat,另一个可能只是jvm独立进程,或者另一个可以是在Karaf容器内运行的OSGi捆绑包,部署在docker容器内。因此,选项(1)也可以部署到选项(2)。

根据你所走的道路,你必须精通不同的技术,例如:

  1. 保险丝:osgi/保险丝容器,camel,maven
  2. Fabric:您的随需应变容器(例如spring-boot/tomcat、java进程、Fuse、python进程、scala进程等)、Docker、Kubernetes、Fabric8、OpenShift、maven等

希望这个帮助:-)

我一起使用Camel的javadsl,并将其部署在封装在docker容器中的apachekaraf中。关键是要使用特性描述符和maven存储库。然后,您可以创建camel项目的自定义发行版,这些发行版将加载到您的karaf发行版中。这意味着您可以采用非常酷的微服务方法,将服务部署为单独的docker容器。

最大的困难是让卡拉夫的定制分发工作。一旦完成,剩下的都很好。我不使用弹簧,所以不能谈论弹簧靴。

在Karaf/docker中,您可以部署hawtio,并在hawtio中进行监控、查看指标和做各种其他事情。Karaf还有一个滗析器,它有一个kibana仪表板和警报功能。

答案应该完全取决于您最熟悉的容器技术以及您想对Camel应用程序做什么。

我认为当您想用Camel创建MSA应用程序并且已经熟悉Spring时,Spring Boot是最好的。好消息是Camel现在完全支持Spring Boot:http://camel.apache.org/spring-boot.html

另一方面,如果你喜欢古典风格的独立方法,Karaf将是一个坚如磐石的选择,因为像JBoss Fuse这样的商业产品(https://developers.redhat.com/products/fuse/overview/)使用Karaf作为主要容器。另外,如果你是OSGi爱好者,那么毫无疑问你会选择Karaf;-)

最后,不要忘记,您还可以在JEE应用程序容器上运行Camel应用程序。基本上,您可以将它们打包为.war,并将它们部署到任何JEE容器中,但值得注意的是,WildFly对Camel有扩展的集成支持:http://wildfly-extras.github.io/wildfly-camel/使用WildFly Camel子系统,您可以像在Karaf上一样部署简单的.jarCamel应用程序。

实际上我也有同样的问题,这是我的结论:

卡拉夫优点:1.基于OSGI,热部署,支持多版本。2、支持Maven,可以从Maven回购持续部署。缺点:1.遗留jar不支持OSGI,需要重新创建jar2.依赖关系冲突真是地狱。3.将功能拆分为捆绑包,这将需要更多的时间来开发和测试。

弹簧防尘套优点:1.Spring就像胶水一样,可以很容易地集成不同的库。2.弹簧引导使启动、开发和测试变得更加容易。3.Spring boot+docker,将使在云环境中的部署更加容易

缺点:1.如果你想同时支持多个版本,需要加倍的基础设施。

所以我的建议是在春季靴中使用驼色。我的架构设计就像Spring Boot+Camel+Docker+Consul+Registor

最新更新