camel学习笔记

一.认识Camel

1:Camel 的领域特定语言 (DSL)

■ Java DSL
from("file:data/inbox").to("jms:queue:order");
■ Spring DSL
<route>
 <from uri="file:data/inbox"/>
 <to uri="jms:queue:order"/>
</route>
■ Scala DSL
from "file:data/inbox" -> "jms:queue:order"

Camel 具有模块化架构,允许将任何组件加载到
Camel,无论该组件是否随 Camel 一起提供,都来自第三方,
或者是您自己的自定义创建。

2.Camel 使用简单直观的 URI 配置。

您可以将文件使用者配置为在子文件夹中递归扫描并仅包​​含 .txt 文件,如下所示:

from("file:data/inbox?recursive=true&include=*.txt")...

3.自动型转换器

如果您发现需要转换为 Camel 不支持的类型,您可以创建自己的类型转换器。Camel 组件也利用了这个特性;他们可以接受大多数数据,类型并将数据转换为他们能够使用的类型。此功能是其中之一,骆驼社区中的顶级最爱。

4.Camel 的消息模型

■ org.apache.camel.Message——包含数据的基本实体
在骆驼中被携带和路由
■ org.apache.camel.Exchange——用于消息交换的 Camel 抽象。这种信息交换有一个“输入”信息,作为回复,一个“输出”信息

5.camel架构图

 路由引擎使用路由作为消息路由的规范。路由是使用 Camel 的一种特定领域语言 (DSL) 定义的。处理器用于在路由期间转换和操作消息,还用于实现所有 EIP 模式,它们在 DSL 语言中有相应的关键字。组件是 Camel 中的扩展点,用于添加连接到其他系统。为了将这些系统暴露给 Camel 的其余部分,组件提供了一个端口接口。

6.camelContext

camelContext就是一个容器也就是运行时系统,包括所有的碎片在里面。

Components:Camel 能够动态加载组件,通过类路径上的自动发现或在 OSGi 中激活新包时
容器。

EndPoints:包含已创建的端点。

Routes:包含已添加的路由

Type converters:Camel 有一种机制,允许您手动或自动从一种类型转换为另一种类型。

Data formats:包含加载的数据格式。

Registry:包含一个允许您查找bean的注册表。默认情况下,这将是一个JNDI注册表。如果您使用的是来自Spring的Camel,这将是Spring应用程序上下文。它可以如果在OSGi容器中使用Camel,也可以作为OSGi注册表。我们将在本期节目中介绍注册情况。

Languages:包含加载的语言。Camel允许您使用多种不同的语言创建表达式。当我们介绍XPath语言时,您将看到它的实际应用DSL。

PRODUCER:生产者是 Camel 的抽象,它指能够创造和向端点发送消息。例如,FileProducer 会将消息正文写入文件。一个 JmsProducer,在另一方面,将骆驼消息映射到一javax.jms.Message 之前将它发送到JMS 目的地。这是 Camel 的一个重要特性,因为它隐藏了与特定对象交互的复杂性运输。您需要做的就是将消息路由到端点。

CONSUMER:Camel 中有两种消费者:事件驱动的消费者和轮询。
消费者。接收生产者产生的消息并包装它们的服务在交换中,并发送它们进行处理。消费者是源头
交换在骆驼中路由,要创建一个新的交换,消费者将使用端点包装正在使用的有效负载。然后使用一个处理器来启动路由使用路由引擎在 Camel 中进行交换。事件驱动的消费者监听在特定的消息传递通道(通常是 TCP/IP 端口或 JMS 队列)上,并等待客户端向其发送消息。当一个消息达,消费者醒来并接受消息进行处理。与事件驱动消费者相比,主动轮询消费者从特定来源(例如FTP 服务器)获取消息。这轮询消费者在 EIP 术语中也称为同步接收者,因为它在处理完当前消息前不会轮询更多消息。轮询消费者的一个常见风格是预定的轮询消费者,它在预定的时间间隔。文件、FTP 和电子邮件传输都使用预定的轮询消费者。 

二.route路由

在企业消息传递系统的上下文中,路由是一个过程,通过该过程消息从输入队列中取出,并根据一组条件发送到一个几个输出队列

 从 FTP 服务器下载订单并将它们发送到 JMS 队列:JMS(Java 消息服务)是一种 Java API,允许您创建、发送、接收和阅读消息。它还要求消息传递是异步的,并且具有特定的可靠性元素,例如保证和一次性交付。 JMS 是德Java 社区中的事实消息传递解决方案。在 JMS 中,消息消费者和生产者通过中介(JMS 目的地)相互交谈。

JMS 还提供了一个 ConnectionFactory,客户端(如 Camel)可以使用它来创建与 JMS 提供者的连接。 JMS 提供者通常被称为代理。因为它们管理消息生产者和消息消费者之间的通信。 

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");

CamelContext context = new DefaultCamelContext();

context.addComponent("jms",JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));

org.apache.camel camel-jms 2.5.0

org.apache.activemq activemq-core 5.3.2

假设您想向名为incomingOrders 的队列发送一条JMS 消息。在这种情况下,URI 将是
jms:queue:incomingOrders这是不言自明的。 “jms”前缀表示您正在使用 JMS您之前配置的组件。你甚至可以省略队列限定符,因为默认行为是发送到队列而不是主题--jms:incomingOrders

添加处理器

 FTP 消费者作为输入被送入处理器;处理器不会修改
消息有效负载或标头,因此交换将作为输入转移到 JMS 生产者。

1.spring routes

1 创建一个 EnglishGreeter 实例并将 bean 命名为 myGreeter
2 创建一个 GreetMeBean 实例并将 bean 命名为 greetMeBean
3 设置 GreetMeBean 的 greeter 属性对 bean 的引用
命名为 myGreeter,bean 的这种配置称为布线。为了将此 XML 文件加载到 Spring 中,您可以使用 ClassPathXmlApplicationContext,它是 ApplicationContext 的具体实现,它是随 Spring 框架提供。此类从某个位置加载 Spring XML 文件 。

 

 第一种

 

第二种

通过条件判断路由到哪个队列

您还可以控制选择块中的最终目的地。例如,您可能不希望不良订单继续通过其余路线。你想要
它们被路由到 badOrders 队列并停在那里。在这种情况下,您可以使用DSL中的stop方法:

1.Using message filters

使用xpath过滤掉测试消息。

 

2.多播

 3.使用收件人列表

3.窃听器

原始交换继续通过该路线,就好像您没有使用窃听器一样全部。 Camel 不会等待来自窃听器的响应,因为窃听器会设置消息交换模式 (MEP) 到 InOnly。 这意味着消息将被发送以一种即发即弃的方式发送到 orderAudit 队列——它不会等待回复。 

4.总结

■ 路由出现在日常生活的许多方面。无论您是在网上冲浪,做网上银行,预订航班或酒店房间,消息正在使用某种路由器在幕后路由。
■ 使用 Apache Camel 路由消息。 Camel 主要是一个消息路由器,允许您在各种传输和 API 之间路由消息。
■ Camel 的 DSL 用于定义路由规则。 Java DSL 允许您在流行的 Java 语言,可让您在大多数 IDE 中自动完成术语。
它还允许您在编写路由时使用 Java 语言的全部功能。它被认为是 Camel 中的主要 DSL。 Spring DSL 允许您编写路由规则,而无需任何 Java 代码。
■ Java DSL 和Spring CamelContext 是一个强大的组合。在第 2.4.3 节中我们描述了我们最喜欢的编写 Camel 应用程序的方法,即启动Spring 中的 CamelContext 并在 Java DSL RouteBuilders 中编写路由规则。这为您提供两全其美:Camel 在 Java DSL 中最具表现力的 DSL,以及 Spring CamelContext 中功能更丰富和标准的容器。
■ 使用企业集成模式 (EIP) 解决集成和路由问题。 EIP类似于面向对象编程的设计模式,但适用于企业集成世界。
■ 使用 Camel 的内置 EIP 实现,而不是自己创建。 Camel 将大多数 EIP 实现为易于使用的 DSL 术语,这使您可以专注于实际业务问题而不是集成架构。

三.数据转换

■ 使用 EIP 和 Java 转换数据
■ 转换 XML 数据
■ 使用众所周知的数据格式进行转换
■ 为转换编写自己的数据格式
■ 了解 Camel 类型转换器机制

Camel 提供了三种使用这种模式的方法:
■ 使用处理器
■ 使用beans
■ 使用<transform>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值