你如何从 Java 代码中调用 Camel 路由?

什么是Camel routes?

了解路由以及如何在 Apache Camel 中使用它们

如果您仍在学习 Camel 的基础知识,那么您可能会遇到术语route

但究竟什么是骆驼路线?

Apache Camel 中的路由是由 Camel 按顺序执行的一系列步骤,它们使用和处理消息。Camel 路由从消费者开始,然后是一系列端点和处理器。

因此,首先,路由使用消费者接收消息——可能来自磁盘上的文件或消息队列。然后,Camel 执行路由中的其余步骤,或者以某种方式处理消息,或者将其发送到端点(可以包括其他路由)以进行进一步处理。

如何在 Camel 中创建路线?

要在 Camel 中创建路由,首先要在代码中定义它。这称为路由定义,通常用 Java 或 XML 编写。

然后,您启动 Camel,将您的路线定义传递给它。Camel 读取路由定义并在Camel Context 中创建路由。Camel Context 是一个引擎,它是 Camel 的一部分,它运行你的路线。

如果您正在使用某些框架(例如 Spring Boot),Camel 会尝试自动发现您的路由。

一旦 Camel Context 启动,您可以检查它以查看所有正在运行的路由。

骆驼路线示例

要查看路线的实际情况,请参阅以下示例。

首先,该路由是用 Java 语法或 DSL(Domain-Specific Language)编写的。在 Java 中,路由进入一个RouteBuilder类,该类有一个configure()方法,您可以将路由代码添加到:

import org.apache.camel.builder.RouteBuilder;
​
public class MyFirstRouteBuilder extends RouteBuilder {
​
    public void configure() throws Exception {
        from("jms:queue:HELLO.WORLD")
            .log("Received message - ${body}");
    }
}

此路由使用 JMS 组件从名为HELLO.WORLD的队列接收消息。然后,它将包含消息正文 ( ${body})的日志消息写入控制台。

骆驼路线和组件解释(信息图)

有时可能很难准确理解路由的作用以及它是如何工作的。所以我创建了这个信息图来展示 Camel 中的不同概念是如何在一条路线中结合在一起的。

在这张图中,我们有一条路线。我们使用 File 组件来读写文件。我们还使用基于内容的路由器根据文件名过滤文件。File 组件通过向 Exchange 添加标头来帮助我们,我们可以在 Predicate 表达式中使用它。

显示 Camel 路由的信息图,包括组件、端点 URI、EIP、谓词、基于内容的路由器和 Camel 路由Apache Camel 中的路由解释

你如何从 Java 代码中调用 Camel 路由?

如果您已经在应用程序中嵌入了 Camel,则可以使用 Camel API 向 Camel 端点发送消息。

要从您的代码向 Camel 路由发送消息,请获取ProducerTemplate对象。然后:

  • 要异步发送消息,请使用其中一种sendXXX()方法

  • 要同步发送消息(并使用响应),请使用其中一种requestXXX()方法

例如,如果您使用 Spring,您可能会执行以下操作以异步(即发即弃)向端点发送消息:

import org.apache.camel.ProducerTemplate;
​
public class InvokeCamelRoute {
​
    @Autowired
    protected ProducerTemplate template;
​
    public void invokeRoute() {
        template.sendBody("direct:start", "Your message body goes here");
    }
​
}
posted @ 2021-09-26 17:16  yiwenzhang  阅读(1241)  评论(0编辑  收藏  举报