几天来我一直在研究 Camel 和 EIP,但有几件事我并不真正了解(还 :))。例如,假设我有 5 个应用程序,它们使用多种技术(REST WS、JMS、数据库等)相互交换数据。- 我应该把我的骆驼路线放在哪里?- 我是否应该更改每个应用程序的代码并在其上声明特定的路由?- 我应该创建一个新的 Web 应用程序(或 OSGi 包)并使其作为中央提供程序来处理路由吗?我的意思是,将其他应用程序的代码更改为指向此应用程序中定义的 Camel 端点?- 使用 Camel 意味着更改集成集中每个现有应用程序的代码?我的意思是,骆驼在现实世界的场景中是如何工作的?它更像是一个拦截东西的中央网络应用程序,处理它然后发送到其他地方?它是我的应用程序内部的东西(与业务规则位于同一位置)然后池/拦截/侦听并处理它吗?我知道这些都是愚蠢的问题,但我昨天想着他们睡不着觉。任何帮助将非常感激 :)
2 回答
这是我们使用的方法。
首先,问自己一个问题,您是否使用骆驼来促进独立运行的应用程序/服务之间的通信?如果是这种情况,那么您可以编写一个包含骆驼路线的新应用程序,它基本上将所有其他组件连接在一起以进行通信,并且您对现有应用程序进行最少的更改。
另一方面,也许您想使用骆驼作为已经相互通信的服务的架构标准?在这种情况下,您希望进入每个现有应用程序并将用于服务间通信的代码(以及与之相关的所有内容,如配置和错误处理)重写为骆驼路由。您可能会保持业务逻辑原样并删除/重写大量代码以执行 Web 服务调用、jms 等操作。
一条中等规模的骆驼路线可以轻松替换几百行样板代码并且更具可读性,而且您可以免费获得所有 EIP 和组件(quartz、hazelcast 等)。
有关信息,我使用 JBoss Fuse 作为 ESB(使用 Apache Camel),它在企业级集成方面工作得非常好。
vikingsteve 给出了很好的回答。
我们使用 Camel 来集成遗留应用程序,因此 Camel 路由是外部的。我们使用 ActiveMQ 作为消息总线,使用 tomcat6 作为容器。如果我们现在开始,我们将使用 JBoss Fuse (Karaf)。
每个终端系统都有一个 Camel 路由集(在我们的系统中是一个战争),它充当该系统到消息总线的适配器。
集成获得骆驼路线集。
这个想法是,随着我们添加越来越多的集成,我们将每个应用程序演变成一组基于其数据的服务,并且有一天,最终会形成一个面向服务的架构。
在理想情况下,终端系统路由集将在与终端系统相同的服务器上运行,而集成路由集将集中运行。在实践中,我们集中运行所有路由集。这是终端系统上的 SLA 和托管协议的问题。
听起来您有一个更垂直集成的环境,因此您应该能够比我们更干净地实施规范解决方案。
如果你最终得到了分布在网络上的 Camel 实例,那么 Fusesource 正在开发一个名为 Fuse Fabric 的管理工具。我不知道自从 Redhat 收购它以来,它已经走了多远。