Mule ESB-Content-Based Routing Tutorial(1)

这篇文章是翻译的,原英文:

 http://www.mulesoft.org/documentation/display/current/Content-Based+Routing+Tutorial


在  Basic Studio Tutorial(见我的译文)中,你已经认识了 Mule Studio,并且创建了一个简单的“Hello,World”应用。


本教程将引导您如何使用 Mule Studio 构建一个稍微复杂的“Hello,World”应用,根据它们的内容路由信息。创建并在本地运行该示例后,您将能够应用你所学到的知识创建更复杂的应用。

内容:
一、假设 
二、目标
三、用选择路由器创建流程
四、配置流元素
五、运行应用
六、使用应用
七、编辑正在运行的应用
八、添加一个子流程
九、额外的加分任务
十、停止应用程序
十一、更进一步

一、假设
本教程假定您已经下载并安装了 Mule Studio 。如果你先前没有任何使用Eclipse或基于Eclipse的IDE的经验,请查看简要介绍Mule Studio的页面或者完成Basic Studio Tutorial. 

二、目标
在本教程中,你的目标是:
1、使用Mule Studio创建创建一个应用,根据你提供的路由选择器的逻辑路由信息。
2、使用Mule 表达式语言设置和调用流程变量。
3、在嵌入Mule Studio的本地运行环境中运行该应用
4、使用你的浏览器测试你的应用
5、在应用运行时,调整应用,有效地使用“热部署”。
6、编辑应用,将部分过程转移到子流程中。
7、(可选)用你的知识迎接一个额外的挑战。

三、用选择路由器创建流程

启动Mule Studio并创建一个新的,名为CBR  Tutorial. 的mule项目。如果您需要在启动Studio并创建一个项目时维护更多信息,请参阅 Basic Studio Tutorial 。

接下来,使用Studio元素板上的构件块创建应用模型,如下: 
1、接收一个HTTP请求
2、遍历请求,过滤掉所有“favicon.ico”
3、把入站属性转换成一个流程变量
4、根据与该消息相关联的流量变量路由消息
5、设置基于路由逻辑的新的消息内容
6、将该消息内容用作一个HTTP响应
7、将总结性结果记录到控制台

你可以在Studio中使用这些构建块模拟这个应用:
HTTP endpoint 让你的Mule应用程序通过HTTP或HTTPS协议连接到Web资源;在元素板的端点部分找到这个端点
Expression Filter 使用Mule表达式可以过滤消息。可以在元素板的过滤器部分找到这个消息处理器
Variable Transformer 可以在消息中设置一个流程变量,以便在流程的其他地方使用该变量。可以在元素板的转换器部分找到这个消息处理器
Choice Router 根据配置的路由逻辑路由传入的消息;可以在元素板的流程控制部分找到这个处理器
Set Payload Transformer 修改http内容为Hello,World; 在元素板的转换器部分找到这个转换器
Logger 根据mule表达式的值记录日志信息或活动;在元素板的组件部分找个这个组件

 

拖放这些构件块到画布上,可直观地构造或模型化,一个流程,如下所示。
具体步骤省略。
Mule ESB-Content-Based Routing Tutorial(1)

只需点击几下,你已经在Mule Studio的画布上创建了一个完整的应用。
在下一部分,一旦你在画布上配置了各个元素,这个流程将完成你的应用要实现的目标。

Mule ESB-Content-Based Routing Tutorial(1)


四、配置流程元素

接下来,配置流程元素,使应用根据你调用入站端点时URL中的包含几种不同语言的查询参数做出响应,例如,如果你调用http://localhost:8081/?language=French,应用程序应该使用法语响应你的请求。  
几乎所有的Mule元素提供配置选项,你可以通过以下两种方式之一设置:
*通过使用在Studio的可视化编辑器控制台上的构建块属性编辑器
*通过使用Studio的XML编辑器编辑XML代码,或使用任何其他的XML编辑环境。

下列指示引导你如何使用可视化编辑器和XML编辑器配置每个构建模块。使用标签可以控制在可视化编辑器和XML编辑器之间来回切换。

以下忽略可视界面(如果喜欢使用可视化界面,可参考我的上一篇译文),直接使用xml编辑器
HTTP端点
按如下所示配置HTTP端点:
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/>

表达式过滤器
这个表达式告诉Mule检查消息内容中不等于字符串‘ /favicon.ico"的部分 。如果表达式的值为true ,Mule传递消息到流中的下一个步节点。如果表达式计算为false ,Mule停止处理该消息。

按如下所示配置表达式过滤器:
<expression-filter expression="#[message.payload != ‘/favicon.ico‘]" doc:name="Expression"/>


变量转换器
这个转换器告诉Mule在所有传入消息中查找叫language的属性,如果发现,设置它(和它的值)为一个流程变量,元数据是以一个键/值对的形式在消息中携带。

按如下所示配置变量转换器:
<set-variable variableName="language" value="#[message.inboundProperties[‘language‘]]" doc:name="Set Language Variable"/>

选择路由器,然后构建消息处理器

按如下所示配置:

<choice doc:name="Choice">
   <when expression="#[flowVars[‘language‘] == ‘Spanish‘]">
       <set-payload value="Hola!" doc:name="Reply in Spanish"/>
   </when>
   <when expression="#[flowVars[‘language‘] == ‘French‘]">
       <set-payload value="Bonjour!" doc:name="Reply in French"/>
   </when>
   <otherwise>
       <set-variable variableName="language" value="English" doc:name="Set Language to English"/>
       <set-payload value="Hello!" doc:name="Reply in English"/>
   </otherwise>
</choice> 

在选择路由器的每一个“when”子元素中,表达式告诉Mule在传入消息中寻找叫做language的流程变量,然后检查它是否等于西班牙语或法语。如果任何一个表达式的值被证明是true,Mule将消息路由到相应的嵌套消息处理器中。
如果在两个“when”元素中的表达式被证明是false,Mule将执行在“otherwish”子元素中的默认配置路由该消息,通过这种方式路由的消息拥有一个language=英语的设置,然后返回英语内容。

日志组件
日志组件根据选择路由的结果,会产生三种可能的消息。

按如下配置日志组件:

<logger message="The reply "#[message.payload]" means "hello" in #[flowVars[‘language‘]]." level="INFO" doc:name="Logger"/>

请注意,Studio会自动转义引号,按如下内容:

<logger message="The reply "#[message.payload]" means "hello" in #[flowVars[‘language‘]]." level="INFO" doc:name="Logger"/>

通过单击文件>来保存您的应用程序。
您的完整的应用程序XML,一旦配置,应该如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
    <flow name="CBR_TutorialFlow1" doc:name="ChoiceRoutingTutorial">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8084" doc:name="HTTP"/>
        <expression-filter expression="#[message.payload != ‘/favicon.ico‘]" doc:name="Expression"/>
        <set-variable variableName="language" value="#[message.inboundProperties[‘language‘]]" doc:name="Set Language Variable"/>
        <choice doc:name="Choice">
            <when expression="#[flowVars[‘language‘] == ‘Spanish‘]">
                <set-payload value="Hola!" doc:name="Reply in Spanish"/>
            </when>
            <when expression="#[flowVars[‘language‘] == ‘French‘]">
                <set-payload value="Bonjour!" doc:name="Reply in French"/>
            </when>
            <otherwise>
                <set-variable variableName="language" value="English" doc:name="Set Language to English"/>
                <set-payload value="Hello!" doc:name="Reply in English"/>
            </otherwise>
        </choice>
        <logger message="The reply "#[message.payload]" means "hello" in #[flowVars[‘language‘]]." level="INFO" doc:name="Logger"/>
    </flow>
</mule>

到此,该应用已经创建并配置完毕,下篇将运行并完善该应用。

忍不住吐槽几句,翻译这活真不是人干的,想翻译准确,真的不容易,不是会几个单词就能解决问题的,还要有很强的技术支撑,这样也不见得能翻译准确。如果英语能力过关,推荐看原著,翻译的东西,总感觉味道有些不一样,放在一起对比,反而觉得英文的原著更有味道些,不得不承认,老外的文档写得很用心,自己任重道远啊。





Mule ESB-Content-Based Routing Tutorial(1)

上一篇:DEV gridView显示行号


下一篇:第十章 Hive调优 【执行计划】