我正在尝试了解 Apache Camel,它似乎是一个轻量级的 ESB。如果我正确理解 Camel/ESB,那么您可以将 Camel Route 视为节点和边的图。每个节点都是路由上的端点(可以消耗/产生消息)。每条边都是两个不同端点(1 个生产者和 1 个消费者)之间的路由。
假设这是正确的,我有一个实际问题:部署应用程序的 ESB/Camel 路由的最佳实践有何规定?我应该将其打包为自己的 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
Or...
my-esb.jar/
MyEJB_1.class
MyEJB_2.class
MyWebService.class
根据我的理解,有几种方法可以运行 Camel。
嵌入到 Java 应用程序中:您可以将 Camel 嵌入到独立的 Java 应用程序中。在这种情况下,您将在应用程序内启动一个 Camel 上下文,它将启动路由等。当您的应用程序需要与服务等进行通信时,这非常有用。为此,您需要为组件部署 Camel 和第三方 jars类路径。
嵌入到 Web 应用程序中:正如人们已经指出的那样,这似乎是一个流行的选择。 Camel jar 和第三方 jar 包装在 WAR 文件中,并且本质上部署到 Web 容器(例如 Tomcat)以托管 Camel 服务。
嵌入应用服务器中:我读过一些关于如何将 Camel 部署到 JBoss 等应用程序服务器的文章,我什至读过有关人们部署到 Glassfish 的文章。这看起来与部署到 Tomcat 的方式非常相似。 JBoss 有一些您需要解决的类加载问题,这使得它变得棘手。所以,是的,您可以通过 WAR 路线部署到应用程序服务器。
部署到 OSGi:您可以相对快速地将 Camel jar 制作为 OSGi 捆绑包,并部署到 OSGi 框架(例如 Apache Felix)。将 jar 转换为正确的 OSGi 包然后部署相对简单。这里的一个大问题是某些第三方可能没有 OSGi 兼容的捆绑包供您部署。
我个人更喜欢 OSGi 路线。它简单且轻量级,允许我将我的骆驼路由作为持久服务(即 Window 服务、Unix Deamon)托管,占用空间非常小。
您现在应该意识到的是,Apache Camel 可以通过多种方式进行部署,具体如何部署完全由您决定。我花了一段时间才理解如何部署 Camel,因为我必须尝试不同的部署模型才能获得良好的感觉。我唯一没有接触过的是部署到应用程序服务器,因为我觉得这些服务器中的大多数都足够重。
就架构而言,我喜欢将不同的路由/应用程序保存在不同的 jar 中。由于我使用 OSGi,我希望能够更新特定路由并部署它,而无需重新部署所有内容。如果您将所有内容部署在一个 jar 中,则需要拆除世界并重新部署该 jar。但这是个人喜好,您的里程可能会有所不同
希望这个对你有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)