Mule ESB-Content-Based Routing Tutorial(3)


承接 Mule ESB-Content-Based Routing Tutorial(2)

九、额外的加分任务

现在你知道了如何在Studio中使用基于内容的路由方式,尝试运用你的知识完成这个额外的加分任务:

修改你的应用程序,不使用设置为法语或西班牙语的入站属性,传入的消息并不会自动默认为英语,而是随机返回下列三种其他语言(你的选择!),遵循循环选取的原则。  

要做到这一点,你需要替换你刚刚创建的子流程的内容。你将需要另一种流程控制设计,根据循环机制路由传入的消息,你将需要在循环流程控制的范围内定义三种可能的处理分支。在每一个分支中,设置语言属性,并设置消息内容,以你选择的语言来回应。

如果你需要帮助,使用下面的提示。


提示:

如何添加循环选择逻辑到我的应用?

使用轮循流量控制把循环选择逻辑添加到你的应用。可以在元素板的流量控制部分找到这款处理器,或直接添加循环选择元素到你的xml中。


如何定义选项的轮循机制?

在可视化编辑器中,虚线内表示轮循流程控制,拖放三个可变转换器。像你在上面的选择流程控制中做的一样,请保持你的鼠标,这样会出现一个垂直的黑线

,用来创建额外的路由选择。每个变量转换器后,添加一个设置消息内容的转换器。


或者,在XML编辑器,循环元素添加三个设置变量的元素。


每个设置变量的元素后立即加入了一套设置消息内容的转换器 。为了指示mule,每组变量转换器处理后的下一个步骤是设置消息内容的转换器,而不是一个遵循不同循环机制的选项,需要在一个处理器链中包含一对设置变量转换器和设置消息内容转换器,如下:

...
        <round-robin doc:name="Round Robin">
            <processor-chain>
                <set-variable doc:name="Variable" value="" variableName=""/>
                <set-payload doc:name="Set Payload"/>
            </processor-chain>
            <processor-chain>
                <set-variable doc:name="Variable" value="" variableName=""/>
                <set-payload doc:name="Set Payload"/>
            </processor-chain>
            <processor-chain>
                <set-variable doc:name="Variable" value="" variableName=""/>
                <set-payload doc:name="Set Payload"/>
            </processor-chain>
        </round-robin>
...


如何配置更多的响应语言?

实际操作和上面你在选择路由流程中配置默认选项时差不多,设置不同的语言即可。



查看答案包括步骤说明:

有很多种方式可以实现,但这种方式是最快的。

1、拖放一个循环机制路由元素到子流程,如图所示:
Mule ESB-Content-Based Routing Tutorial(3)

2、拖动现有的三个消息处理器进入轮循范围,如图所示:

Mule ESB-Content-Based Routing Tutorial(3)


3、切换配置XML选项卡来编辑XML,拷贝选中的部分

Mule ESB-Content-Based Routing Tutorial(3)


4、按回车,将复制的代码粘贴两份,总共三份

Mule ESB-Content-Based Routing Tutorial(3)


6、为这三个你创建的路由选项配置属性,设置三种新的语言变量,用这些语言返回消息内容,并设置合适的记录器,如下:

Mule ESB-Content-Based Routing Tutorial(3)


7、在可视化编辑器中,子流程如下:

Mule ESB-Content-Based Routing Tutorial(3)

8、再次保存该应用程序,等待重新部署完成,并观察结果,当你多次访问http://localhost:8081,而无需指定法语或西班牙语作为查询参数。

恭喜!你赚到了你的加分。


9、 查看修改后的应用代码:

<?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/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">
 
    <flow name="CBR_TutorialFlow1" doc:name="CBR_TutorialFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/>
        <expression-filter expression="#[message.payload != ‘/favicon.ico‘]" doc:name="Expression"/>
        <set-variable   doc:name="Set Language Variable" value="#[message.inboundProperties[‘language‘]]" variableName="language"/>
        <choice doc:name="Choice">
            <when expression="#[flowVars[‘language‘] == ‘Spanish‘]">
                <set-payload doc:name="Reply in Spanish" value="Hola!"/>
            </when>
            <when expression="#[flowVars[‘language‘] == ‘French‘]">
                <set-payload doc:name="Reply in French" value="Bonjour!"/>
            </when>
            <otherwise>
                <flow-ref name="CBR_TutorialFlow2" doc:name="Flow Reference"/>
            </otherwise>
        </choice>
        <logger level="INFO" doc:name="Logger" message="The reply "#[message.payload]" means "hello" in #[flowVars[‘language‘]]."/>
    </flow>
    <sub-flow name="CBR_TutorialFlow2" doc:name="CBR_TutorialFlow2">
        <round-robin doc:name="Round Robin">
           <processor-chain>
                <logger message="No language specified. Using Klingon." level="INFO" doc:name="Logger"/>
                <set-variable variableName="language" value="Klingon" doc:name="Set Language to Klingon"/>
                <set-payload value="tlhIngan maH!" doc:name="Reply in Klingon"/>
            </processor-chain>
            <processor-chain>
                <logger message="No language specified. Using Turkish." level="INFO" doc:name="Logger"/>
                <set-variable variableName="language" value="Turkish" doc:name="Set Language to Turkish"/>
                <set-payload value="Merhaba!" doc:name="Reply in Turkish"/>
            </processor-chain>
            <processor-chain>
                <logger message="No language specified. Using Basque." level="INFO" doc:name="Logger"/>
                <set-variable variableName="language" value="Basque" doc:name="Set Language to Basque"/>
                <set-payload value="Kaixo!" doc:name="Reply in Basque"/>
            </processor-chain>
        </round-robin>
    </sub-flow>
</mule>



十、停止应用

要停止应用程序,单击控制台上面的红色,正方形终止图标。

十一、更进一步

这篇文章终于翻译完了,看完我翻译的这几篇文章,MuleESB你就算入门了,剩下的就靠你自己了。

一年又结束了,我该去好好写写年终总结了。


年后见……


Mule ESB-Content-Based Routing Tutorial(3)

上一篇:QT交叉编译与移植


下一篇:cocos2dx游戏开发简单入门视频教程 (cocos2d-x)- 第5天