如何打包/部署ESB?

时间:2012-06-18 19:27:52

标签: java architecture soa apache-camel esb

我正试图围绕Apache Camel,这似乎是一个轻量级的ESB。如果我正确理解Camel / ESB,那么您可以将Camel Route视为节点和边的图形。每个节点都是路由上的端点(可以使用/生成消息)。每条边是两个不同端点之间的路径(1个生产者和1个消费者)。

假设这是正确的,我有一个实际的问题:最佳实践有关部署应用程序的ESB / Camel路由的要求是什么?我应该将其打包为自己的JAR,还是值得自己的EAR充满EJB,Web服务和其他JAR?

我想我是在询问如何部署/构建Camel Route或ESB,例如:

my-esb.ear/
    ejb1.jar/
        MyEJB_1.class
    ejb2.jar/
        MyEJB_2.class
    webservice.war/
        MyWebService.class

或者...

my-esb.jar/
    MyEJB_1.class
    MyEJB_2.class
    MyWebService.class

5 个答案:

答案 0 :(得分:7)

根据我的理解,有几种方法可以运行Camel。

  1. 嵌入在Java应用程序中:您可以将Camel嵌入到独立的Java应用程序中。在这种情况下,您将在应用程序中启动Camel Context,它将启动路由等。当您的应用程序需要与服务等通信时,这非常有用。为此,您需要将Camel和第三方jar部署到组件中classpath。

  2. 嵌入在Web应用程序中:正如人们已经指出的那样,这似乎是一个受欢迎的选择。 Camel jar和第三方jar包装在WAR文件中,基本上部署到Web容器(如Tomcat)以承载Camel服务。

  3. 嵌入在应用程序服务器中:我已经阅读了一些关于如何将Camel部署到应用程序服务器(如JBoss)的文章,我甚至读过有关部署到Glassfish的人员。这与您部署到Tomcat的方式非常相似。 JBoss有一些你需要解决的类加载问题,这使得它变得棘手。所以是的,你可以通过WAR路由部署到应用服务器。

  4. 部署到OSGi :您可以相对快速地将Camel jar作为OSGi包,并部署到OSGi框架,例如Apache Felix。将jar转换为适当的OSGi包然后部署相对简单。这里的一个大问题是某些第三方可能没有供您部署的OSGi兼容捆绑包。

  5. 我个人的偏好是OSGi路线。它简单轻便,允许我将我的骆驼路径作为持久服务(即Window服务,Unix Deamon)托管,占用空间非常小。

    你现在应该意识到的是,Apache Camel可以通过多种方式进行部署,由你自己决定如何做到这一点。我花了一些时间来了解如何部署Camel,因为我必须使用不同的部署模型来获得良好的感觉。我没有碰过的唯一一个是部署到Application Server,因为我觉得这些服务器大部分都足够重。

    就架构而言,我喜欢将不同的路线/应用程序保存在不同的罐子中。由于我使用OSGi,我希望能够更新特定路由并进行部署,而无需重新部署所有内容。如果您在一个jar中部署了所有内容,则需要重新进行全局重建并重新部署jar。然而,这是个人偏好,您的里程可能会有所不同

    希望这有点帮助。

答案 1 :(得分:4)

让我逐一回答你的问题:

  

提供应该包含的一般因素的描述性,非模糊列表   用于确定如何最好地部署ESB(作为单个EAR   每个端点都是嵌入式JAR或单个“单片”   JAR);

Embeded或Monolithic jar无所谓。其中重要的是捆绑或战争部署。如果是独立捆绑包,您最终会得到一个非常胖的部署存档,其中包含大量的jar以进行依赖性解析。

  

完全解释为什么Camel可能无法很好地使用Java EE应用程序   像JBoss或GlassFish这样的服务器

  1. App-Server / Container的线程/资源/端口管理可能会施加限制。

  2. 常用库版本的冲突

  3. ClassLoading机制的冲突
  4. 逻辑上,如果你的容器支持OSGi,那么Camel不应该遇到任何问题。

    1. 由于Apache Camel是一款非常轻量级的消息路由器,因此您绝对可以将其作为 war 文件与您的 ear 以及您的Web应用程序打包在一起。如果您正在使用maven / Ivy并且您的Web容器支持osgi,那么Bingo!生活会更容易。
    2. 第二个选项是将您的应用程序部署为捆绑包
    3. 和另一个是独立的Java SE jar。
    4. 按照下面的链接[虽然,已经过时了],这些将为您提供包装上的逐步指导,至少是包装机制的清晰度:

      Camel Step By Step

      Camel in a Web Application

      Camel Real Life Packaging & Deployment in OSGi environment

答案 2 :(得分:1)

与其他答案一样,它取决于您的需求,但ESB通常是不同集成流程的组合,不一定共享相同的生命周期。

如果是这种情况,我建议使用jar每个集成过程方法。这样,您可以为不同的jar提供不同的开发生命周期,并且您可以向您的客户保证您没有触及除jar中的任何代码之外的任何代码。< / p>

这并不意味着您必须使用ear解决方案。您可以在war文件中完美地打包不同进程的代码,而不会产生ear开销。

答案 3 :(得分:0)

这取决于您的需求。没有单一的真实答案更好。

Camel可以适应您现有的基础架构和运行时平台。因此,使用Camel嵌入您的应用程序,就像这个平台可以实现的那样,以及您想要的方式。

例如,要在Web应用程序(WAR)中使用Camel,您可以看到以下链接:http://camel.apache.org/tutorial-on-using-camel-in-a-web-application.html

答案 4 :(得分:0)

你正在考虑.ear嵌入,我明白了。

我建议你考虑将Camel嵌入到功能齐全的Java EE服务器中。它肯定是可行的,但你会得到一些工作来连接它们(与commonJ,WorkManagers,JNDI引用等)。具体来说,让Camel处理线程是一个很大的优点。

将Camel嵌入spring-web-app(.WAR)中我个人最喜欢在Jetty或Tomcat中部署。然后你可以访问一个体面的servlet容器,一个可以执行某些操作的运行时等等。

实际上,我在一些使用嵌入式Camel的生产环境中使用了ActiveMQ的标准下载,更多用于适配器而不是ESB,但是,如果ActiveMQ是您的消息传递主干,它可能是一个有效的选择。 ESB。