我使用 Camel 已经有一段时间了,我真的很喜欢它的简单性。在 Java EE 上使用它总是有点挑战,我最近发表的关于如何做到这一点的演讲之一以及在 Java EE 中引导 Camel 的不同方法实际上建议使用 WildFly-Camel 子系统 。在一个正在进行的系列中,我将探索执行此操作的不同方法,并提供一堆在演讲中仍然缺少的示例。我很高兴在评论中或通过推特上的 @myfear 收到您的反馈和请求。
在 WildFly 8.2 上开始使用 Camel
Wildfly-Camel 子系统提供 Apache Camel 与 WildFly 应用服务器的集成。它允许您将 Camel Routes 添加为 WildFly 配置的一部分。路由可以作为 Java EE 应用程序的一部分进行部署。 Java EE 组件可以访问 Camel 核心 API 和各种 Camel 组件 API。您的企业集成解决方案可以构建为 Java EE 和 Camel 功能的组合。
备注:WildFly-Camel 3.x 版本预计将支持最新的 WildFly 9。
做好准备
下载 WildFly 8.2.0.Final 并将其解压缩到您选择的文件夹中。下载并解压 wildfly-camel 补丁 (2.3.0) 到 wildfly 文件夹。开始 WildFly
bin/standalone[.bat|.sh] -c standalone-camel.xml
启动和运行的最快方法之一是使用 Docker 和 WildFly Camel 映像 。此图像与 WildFly 8.1 捆绑在一起,并且已经安装了 Camel 子系统。
定义和使用 Camel 上下文
CamelContext 表示单个 Camel 路由规则库。您以类似于 Spring ApplicationContext 的方式使用 CamelContext。它包含您的应用程序的所有路由。您可以根据需要拥有任意数量的 CamelContext,只要它们具有不同的名称即可。 WildFly-Camel 让您将它们定义为 a) 在 standalone-camel.xml 和 domain.xml 中作为子系统定义本身的一部分和 b) 或将它们部署在 包含 -camel-context.xml 后缀文件的受支持的部署工件 中c) 它可以通过 RouteBilder 和 CDI 集成 与其路由一起提供。
定义的 CamelContext 可以通过两种不同的方式使用:a) @Injected via Camel-CDI 或 b) 从 JNDI 树 访问。
示例上下文和路由
对于以下示例,我使用了一个上下文以及通过 CDI 和 RouteBuilder 提供的关联路由。它是一个应用程序范围的 bean,随着应用程序的启动而自动启动。 @ContextName 注释为 CamelContext 指定了一个特定的名称。
bin/standalone[.bat|.sh] -c standalone-camel.xml
路线本身并不十分具有挑战性。它从 direct:start 获取一个空的消息体,并在 CDI bean 方法“sayHello”的输出前加上字符串“user”。给它。作为参考,完整的代码可以在 我的 GitHub 帐户 上找到。所以,接下来我们需要弄清楚的是,如何在各种 Java EE 组件规范中使用这条路线。
从 CDI 使用 Camel
Camel 从 2.10 版本开始支持 CDI。在子系统之前和之外,它需要被引导。这不再是必需的,您只需按名称 @Injecting 即可在 @Named CDI bean 中使用部署或定义的 CamelContext:
bin/standalone[.bat|.sh] -c standalone-camel.xml
从 JSF、JAX-RS 和 EJB 使用 Camel
有了关于如何在 CDI 中使用 CamelContext 的知识,您会假设,从 JSF 等中做同样的事情很容易。这不是真的。实际上,您不能将它注入到绑定到 JSF 组件的 ManagedBean 甚至 CDI Beans 中。另外,它在 EJB 中不起作用。我没有详细研究它,但假设它与范围有关。一个合理的解决方法,事实上,一个更好的应用程序设计是将完整的 Camel 逻辑放入一个单独的 CDI bean 中,然后注入它。
bin/standalone[.bat|.sh] -c standalone-camel.xml
ProducerTemplate 接口允许您以各种不同的方式将消息交换发送到端点,以便从 Java 代码轻松使用 Camel Endpoint 实例。在这种特殊情况下,它只是启动路由并将一个 String 放入主体中,该主体代表我正在使用它的组件的名称。
CDI Bean,充当组件的支持 bean,只使用它:
bin/standalone[.bat|.sh] -c standalone-camel.xml
返回的字符串是“你好 JSF 用户”。这也被写入 WildFly 服务器日志。对于所有其他 Java EE 组件,同样的方法是最好的。
从 EJB 使用 Camel
如果您使用 EJB 作为您的 man 应用程序组件模型,那么仅使用 JNDI 方法也是非常合理的:
bin/standalone[.bat|.sh] -c standalone-camel.xml
Hawtio - 骆驼控制台
子系统中的另一个隐藏的宝石是 Hawtio 控制台的捆绑。它是一个模块化的 Web 控制台,用于管理您的 Java 内容,并有一个 Apache Camel 插件,可以可视化您的上下文和路由。请记住,它是自动配置的安全性,您需要先添加管理用户才能访问它。
进一步阅读和帮助