声明
一、应用集成的需求
对于一个公司而言,应用集成的需求可能来自于:
需要集成系统和应用程序以维持高效运营
公司业务需求
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 ID
Processor ID
Exchanges Completed
Exchanges Failed
Mean Processing Time
Max Processing Time
Min Processing Time
Last 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毫秒值,验证消息是否每五秒钟出现在日志中: