首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESB应该如何打包/部署?

ESB应该如何打包/部署?
EN

Stack Overflow用户
提问于 2012-06-19 03:27:52
回答 5查看 3.7K关注 0票数 9

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

假设这是正确的,我有一个实际的问题:关于部署应用程序的ESB/Camel Route,最佳实践规定了什么?我应该把它打包成它自己的JAR吗,或者它值得成为它自己的耳朵,里面装满了EJB、Web服务和其他JAR?

我想我是在问应该如何部署/架构Camel Route或ESB,例如:

代码语言:javascript
复制
my-esb.ear/
    ejb1.jar/
        MyEJB_1.class
    ejb2.jar/
        MyEJB_2.class
    webservice.war/
        MyWebService.class

或者..。

代码语言:javascript
复制
my-esb.jar/
    MyEJB_1.class
    MyEJB_2.class
    MyWebService.class
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-22 15:23:40

据我所知,有几种方法可以运行Camel。

  1. Embedded in a Java Application:您可以将Camel嵌入到独立的Java应用程序中。在这个场景中,你可以在你的应用程序中启动一个驼峰上下文,它将启动路由等。当你的应用程序需要与服务等进行通信时,这是很好的。为此,你需要将组件的驼峰和第三方jars部署到Web应用程序中的classpath.
  2. Embedded :正如人们已经指出的那样,这似乎是一个流行的选择。Camel jars和第三方jars被包装在一个WAR文件中,并且基本上部署到一个web容器中,比如Tomcat,以托管Camel服务。
  3. Embedded in a application server:我读过一些关于如何将
  4. Embedded部署到应用服务器(如JBoss )的文章,我甚至还读到过关于人们部署到Glassfish的文章。这似乎与部署到Tomcat的方式非常相似。JBoss有一些您需要解决的类加载问题,这使得它变得棘手。所以,是的,您可以通过WAR路线部署到应用程序服务器。
  5. Deploy to OSGi:您可以相对快速地将Camel jar作为OSGi包,并部署到OSGi框架,比如Apache Felix。将jar转换为适当的OSGi包,然后进行部署相对简单。这里的一个大问题是,一些第三方可能没有OSGi兼容的捆绑包供您部署。

我个人更喜欢OSGi路线。它简单且轻量级,允许我将我的camel路由作为持久化服务(例如,窗口服务,Unix Deamon)托管,占用的空间非常小。

你现在应该意识到的是,Apache Camel可以通过几种方式进行部署,这真的是由你来决定你想怎么做。我花了一段时间来理解如何部署Camel,因为我必须尝试不同的部署模型来获得良好的感受。我唯一没有接触到的是部署到应用程序服务器,因为我觉得这些服务器中的大多数都足够重。

就架构而言,我喜欢将不同的路由/应用程序放在不同的jars中。由于我使用的是OSGi,因此我希望能够更新并部署特定的路由,而不必重新部署所有内容。如果您在一个jar中部署了所有内容,则需要关闭整个jar,重新构建并重新部署该jar。但是,这是个人喜好,您的里程可能会有所不同

希望这能对你有所帮助。

票数 7
EN

Stack Overflow用户

发布于 2012-06-26 02:19:01

让我逐一回答你的问题:

提供了一个描述性的、非模糊的通用因素列表,这些因素应该用于确定如何最好地部署企业服务总线(作为单个EAR,每个端点都是一个嵌入式JAR,或者作为单个“单片”JAR);

嵌入式jar或单片jar无关紧要。重要的是捆绑或战争部署。在独立捆绑包的情况下,您最终可能会得到一个非常胖的部署归档文件,其中包含许多用于依赖项解析的jars。

完全解释了为什么Camel不能很好地与JBoss或GlassFish等Java应用服务器配合使用

应用服务器/容器的

  1. Thread/Resource/Port管理可能会将常用库Version
  2. Conflict的restriction.
  3. Conflict强加于ClassLoading机制

从逻辑上讲,如果您的容器支持OSGi,那么Camel应该不会面临任何问题。

  1. As Apache Camel是一个非常轻量级的消息路由器,因此您可以将其与web应用程序一起打包到您的ear中,作为war文件。如果你使用的是maven/Ivy,并且你的web容器支持osgi,那么Bingo!生活会变得容易得多。Java的第二个选项是将应用程序部署为bundle
  2. and,另一个选项是独立的

SE

遵循链接belowThough,足够过时了,它们将给你一步一步的打包方向,至少对打包机制是清晰的:

Camel Step By Step

Camel in a Web Application

Camel Real Life Packaging & Deployment in OSGi environment

票数 4
EN

Stack Overflow用户

发布于 2012-06-22 00:28:20

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

如果您遇到这种情况,我建议您使用每集成过程的jar方法。这样,您可以为每个不同的jar拥有不同的开发生命周期,并且您可以向您的客户保证,除了该jar中的代码之外,您没有接触任何其他代码。

这并不意味着您必须使用ear解决方案。在没有ear开销的情况下,您可以完美地将不同进程的代码打包到war文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11089676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档