
声明
一、应用集成的需求
对于一个公司而言,应用集成的需求可能来自于:
需要集成系统和应用程序以维持高效运营
公司业务需求

1. 解耦生产者和消费者,实现业务的松耦合.
2.使用消息:
Message 消息: Unit of transport containing 消息传递的内容包括


我们看一下支持DSL方式的路由:

我们看一下支持XML (Spring, Blueprint)的路由

二、应用集成的挑战
三、Apache Camel的概念
Camel Exchange object: Wrapper that encapsulates message and its metadata
Camel Exchange对象是封装消息及其元数据的包装器
Camel Exchange object:由以下内容组成:



Processor
from(), followed by list of .to() processors 路由的定义是由一些列processor组成from().to().to()from().to()通道可选地可以包含充当生产者的处理器
DSL
DSL:为特定问题域设计的编程语言,如字符串操作和数据库查询

使用DSL语言描述的路由
示例:Java,XML(Spring,Blueprint),Simple,Groovy,MVELJava DSL示例:

XML DSL example:

Component and Endpoint

Endpoint URI

Exchange Pattern
Apache Camel supports two topologies:
InOnly pattern
InOut pattern
Exchange: Always returned to Consumer (InOnly/InOut)

CamelContext = Runtime environment
Registry for endpoints, routes
Acts as server runtime
Can be deployed in any Java container
Examples: Red Hat Fuse/Red Hat AMQ, JBoss EAP, Wildfly, Apache Tomcat, Apache ActiveMQ
Can also be deployed standalone
CamelContext created programmatically in Java using either:
Dependency injection: Spring, Blueprint
Java annotation: CDI





默认值:Apache Camel路由自动启动
轮询和调度消费者使用文件和资源
端点,CamelContext实现org.apache.camel.Service
服务提供启动,停止,暂停,恢复的方法

四、实验展现
该项目包含Apache Camel路由。 Camel路由从src / data目录中使用五个XML文件,并为每个XML文件创建一个Camel Exchange对象。
Camel Exchange对象表示消息交换,包括请求消息及其相应的回复、以及异常消息。 、
Exchange对象包含文件元数据作为标头和属性,并使用基于内容的路由器(CBR)企业集成模式(EIP)对条件进行评估。 课程后面将详细介绍EIP。
CBR逻辑检查每个XML文件以获取country标记的值。 如果其中一个条件匹配,则Exchange对象将在同一国家/地区名称的相应目录中重新创建相同的源文件。 如果条件不匹配,则Exchange对象将在target / work / cbr / output / others目录中重新创建相同的源文件。
创建 Fuse项目




接下来,查看项目:

查看xml文件:

在Source和Design视图之间切换,以分析编辑器画布中显示的路径,并检查路径及其端点后面的代码:

探索端点属性
在本节中,您将使用“Design”视图来探索为每个端点定义的属性。 您选择每个端点并查看“属性”视图中显示的有关该端点的信息。 您可以检查典型的Camel项目的外观,并了解如何使用Fuse Integration透视图来查看Apache Camel路径。
单击“Details”以检查和操作端点的每个属性:

单击Documentation以阅读构建端点时使用的Camel组件的文档:

单击位于视图中心的When端点。
在Properties视图中,选择Details选项卡。
验证端点的Expression是/ order / customer / country ='US':

切换到Source视图以分析端点的等效代码。
Java DSL,Blueprint和Spring XML是Source视图的受支持语言。

在本地运行项目
Red Hat Fuse项目是与Camel上下文关联的Apache Camel路由的集合,这是路由的基本路由规则库。 您在Red Hat Developer Studio中启动Red Hat Fuse项目。
如前所述,无论何时创建Spring或Blueprint应用程序上下文,在camel-context.xml文件中声明的不同Bean都由Spring或OSGi Blueprint框架实例化。 这就是DefaultCamelContext和RouteBuilder(包含基于DSL的路由定义的类)的创建方式。
在本节中,您将运行Red Hat Fuse项目并验证结果是否符合项目的目标。
在Project Explorer视图中,右键单击camel-lab项目并选择New→Folder:


将/ src / main / data文件夹中的五个XML文件复制并粘贴到/ work / cbr / input文件夹中:

右键单击camel-lab项目,然后选择Run As→Local Camel Context:

Apache Camel Maven插件启动,Console视图显示创建了Camel上下文并启动了Apache Camel路由:
在Console视图中看到日志条目,表明对这五个XML文件的处理已完成:


在Project Explorer中,右键单击work / cbr / output文件夹,选择Refresh,然后检查其他,uk和us子文件夹的内容,以验证这些XML文件的最终正确位置:

查看Camel和Java EE JMX MBean的状态
在本节中,您将查看各种Camel和Java EE JMX MBean的状态,使用JMX层和JMX Navigator来发现构成Camel上下文和ActiveMQ代理的不同MBean对象。
选择JMX Navigator视图。
单击“新建连接”图标:
在“创建JMX连接”对话框中,确保选中“默认JMX连接”选项,然后单击“下一步”。


在JMX Navigator视图中,将“用户定义的连接”树展开一级。
双击JMX服务器连接。
连接状态更改为已连接。

将显示JMX Server,MBeans JMX对象和Camel JMX对象的图标。
继续展开Camel JMX域的树,直到出现cbr-route项,然后选择cbr-route:


单击Processors 并检查结果:

单击“配置文件”并检查结果:

启用跟踪和测试
跟踪功能允许您跟踪Exchange对象的内容和处理器的活动。
请按照以下步骤启用跟踪:
在JMX Navigator中,展开Camel JMX域MBean以显示cbr-example-context项。
右键单击cbr-example-context并选择Start Tracing:

当cbr-example-context图标顶部出现绿色错误时,将为Camel路由启用跟踪。
如果没有出现错误,请刷新cbr-example-context:
进一步的测试追踪功能
在本节中,您将进一步测试跟踪功能,创建消息,并使用“消息和属性”视图查看处理详细信息。
使用Project Explorer展开/ src / main / data文件夹。
选择order5.xml文件并复制它。
将文件粘贴到同一目录中,将其重命名为order6.xml:
选择order5.xml文件并再次复制。
将文件粘贴到同一目录中,将其重命名为order7.xml。
在Project Explorer中,将order6.xml和order7.xml文件按顺序拖放到work / cbr / input中


从JMX Navigator视图中选择cbr-route图标。
在Properties视图中,检查有关路由的表格信息,包括:
Route IDProcessor IDExchanges CompletedExchanges FailedMean Processing TimeMax Processing TimeMin Processing TimeLast Processing Time
设计新项目
在本节中,您将设计一个新的Red Hat Fuse项目,并使用Fuse Integration透视图创建Apache Camel路径。 为此,您使用现有的Maven项目并添加Apache Camel路由,HelloBean和向控制台发送消息的业务逻辑。

将sayHello方法添加到Bean
在设计Apache Camel路由之前,必须将sayHello方法添加到HelloBean类的主体。 路线使用此方法。 该方法接受Exchange对象作为输入参数并返回String对象。
查看camel-lab-2项目的项目内容:
查看HelloBean类
打开HelloBean类并添加sayHello方法

将Fuse Apache Camel路由添加到项目中
使用Fuse Integration编辑器创建一个路径,该路由以指定的时间间隔(每X秒)触发一次计时器事件。 要设计路线,请完成以下任务:
创建Camel上下文
编辑计时器和SetBody组件属性
将Bean标记和Bean处理器添加到项目中
将日志处理器添加到项目中
创建Camel上下文
打开Fuse Integration透视图。
在Project Explorer中,展开src / main / resources /目录。
右键单击同一目录,然后选择新建→其他....
在Select a wizard屏幕中,展开General,选择Folder,然后单击Next:


Right-click the blueprint directory to select it.
Select New → Camel XML File:


双击刚创建的camelContext.xml文件,在Fuse Integration编辑器中将其打开。
从Palette的Components部分中,选择Timer组件并将其拖到画布上显示的_route1路径上:


在画布上,选择表示计时器组件的绿色矩形。
在“属性”视图中,将以下值分配给计时器组件的这些属性:
Id:timer-of-the-demo
Uri:timer:// demo?delay = 5000

通过从菜单栏中选择文件→保存来保存您的工作。
从Palette的Transformation部分中,选择Set Body组件并将其拖到_route1路径上:

确保SetBody组件与画布上的计时器组件相邻。
选择SetBody组件后,选择Properties视图中的以下属性:
General Expression: simple
当出现其他属性字段时,将您的名称指定为嵌套Expression属性的值:

创建从timer-of-the-demo组件到SetBody组件的连接:

添加Bean标记和处理器
切换到Camel路由的Source视图。
在第一个CamelContext标记之前添加以下<bean>标记:
<bean id="helloBean" class="com.redhat.gpte.training.camel.HelloBean"/>

创建Apache Camel上下文时,标记是实例化HelloBean单例所必需的。
切换到“设计”视图。
从Palette的Components部分中,选择Bean组件并将其拖到Camel _route1路径上。

添加日志处理器
从Palette的Components部分中,选择Log组件并将其拖到_route1 Camel路径上。
如果画布上的Log组件仍处于选中状态,请将值$ {body}分配给Message字段。
这个简单的表达式提取并管理Camel Exchange主体的内容到运行时日志:

验证生成的源代码类似于:

在本地运行项目
在Project Explorer中,右键单击camelContext.xml文件,然后选择Run As→Local Camel Context ....

CamelContext启动,在下载所有Apache Maven代码工件后,Camel路由激活。
根据计时器组件中设置的5000毫秒值,验证消息是否每五秒钟出现在日志中:
