java - ESB 应该如何打包/部署?

标签 java architecture soa apache-camel esb

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

假设这是正确的,我有一个实际问题:最佳实践对部署应用程序的 ESB/Camel Route 有何规定?我应该将它打包成自己的 JAR,还是值得成为自己的充满 EJB、Web 服务和其他 JAR 的 EAR?

我想我是在问应该如何部署/架构 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

最佳答案

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

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

  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 兼容包。

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

您现在应该意识到的是,Apache Camel 可以通过多种方式进行部署,具体如何部署完全取决于您。我花了一段时间才了解如何部署 Camel,因为我必须尝试不同的部署模型才能对它有一个良好的感觉。我唯一没有接触的是部署到应用程序服务器,因为我觉得这些服务器中的大多数都足够重。

就架构而言,我喜欢将不同的路由/应用程序保存在不同的 jar 中。因为我使用的是 OSGi,所以我希望能够更新特定路由并部署它,而不必重新部署所有内容。如果您将所有内容都部署在一个 jar 中,则需要取消世界重建并重新部署该 jar。然而,这是个人喜好,您的里程可能会有所不同

希望对您有所帮助。

关于java - ESB 应该如何打包/部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089676/

相关文章:

java - 服务架构- webservies | SOAP

java - setValue 数据到前台服务中的 Firebase RealTimeDatabase 不写入数据

java - 支付宝 android 集成有正确的英文文档吗?

Python - 检查系统是 32 位还是 64 位以确定是否运行函数?

java - 限制访问 Java 包

web-services - SOA/ESB 困境

java - UnsatisfiedLinkError问题

java - 使用Java打开外部程序

ios - MVC 设计模式 iOS 中的项目结构

architecture - 微服务架构——跨域聊天