五、执行应用程序 

完毕创建,配置。并保存你的新的应用程序,您就能够在嵌入Mule的server上执行(包含在Mule Studio中,作为捆绑下载的一部分)。

1、在Package Explorer窗格中,右键单击Basic Tutorial.mflow文件。然后选择Run As>Mule Application。

(假设您还没有保存,Mule会提示您如今保存。

2、Mule会马上显示执行进度齿轮,開始您的应用程序。并让它执行。当启动过程完毕后。MuleStudio读取控制台会显示一条消息,启动应用程序“ cbr_tutorial ”。



六、使用应用
1、打开不论什么一个网页浏览器,然后导航至http://localhost:8081/?language=Spanish
2、您的浏览器会显示一条消息,上面写着 "Hola!"  
3、检查你的Mule Studio控制台,会找到一条日志信息,上面写着,

INFO  2013-11-26 11:30:18,790 [[cbr_tutorial].connector.http.mule.default.receiver.03] org.mule.api.processor.LoggerMessageProcessor: The reply "Hola!" means "hello" in Spanish.

4、在你的浏览器的地址栏中,将url替换为 http://localhost:8081/?

language=French。然后按回车。

5、你的浏览器会显示一条消息,上面写着"Bonjour!"
6、检查你的Mule Studio控制台。会找到一条日志信息。上面写着:


INFO  2013-11-26 11:36:38,826 [[cbr_tutorial].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: The reply "Bonjour!" means "hello" in French.

7、试试不使用不论什么參数来请求这个url:http://localhost:8081 
8、你的浏览器会显示一条消息,上面写着"Hello!"
9、检查你的Mule Studio控制台,会找到一条日志信息,上面写着:


INFO  2013-11-26 11:36:53,709 [[cbr_tutorial].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: The reply "Hello!" means "hello" in English.

10、这最后一条日志消息不是很有趣,也不能提供提供信息,你能够在额外的加分任务中改动它。例如以下。

七、编辑正在执行的应用

假设你在应用执行时进行了改动,并保存。

Mule会自己主动又一次部署你的应用,这通常被称为热部署


看到这个功能的作用,加入还有一个日志构件到信息处理器链中,放在选择范围内的默认选项中。

...
<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>
<logger message="No language specified. Using English as a default." level="INFO" doc:name="Logger"/>
<set-variable variableName="language" value="English" doc:name="Set Language to English"/>
<set-payload value="Hello!" doc:name="Reply in English"/>
</otherwise>
</choice>
...

单击在画布下方控制台选项卡,以查看应用程序的执行日志,然后单击文件>保存保存您的应用程序。观察控制台。并注意Mule马上又一次部署了你的应用。该日志显示的INFO消息指出,因为应用改变,所以又一次部署。



为了測试出这样的变化。并验证你的日志构件工作正常,返回到浏览器。并再次请求http://localhost:8081。

检查Sudio的控制台日志。并寻找一个日志消息,写着:

INFO  2013-11-26 13:03:28,688 

[[cbr_tutorial].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: No language specified. Using English as a default. 

你改动了你的应用。并热部署成功!

八、加入一个子流程

你已经通过一个简单的, 有限的选项在你的应用中路由消息。

在这个样例中,最复杂的路由选项仅仅有三个消息处理器在一个链中,但在更复杂的应用中,可能有很多其它的消息处理步骤,可能带有附加的分支或路由逻辑。

为了使您的代码有组织,将它打造成可重用的块。你能够移动处理的部分到独立的流程或子流程,并将这些流程或子流程与流程參考组件联系起来,在须要时调用它们。


流程和子流程之间的差别是什么?
流程和子流程都是由你链接几个单独的构件单元组成的。并控制接收,处理和路由消息。为了完毕本教程的目标。你能够使用一个流程或子流程来完毕以下的步骤。但在更高级的情况下。你可能须要一个或还有一个。流程有更高级的配置选项。如改变处理策略和定义一个异常策略的能力。子流程总是有一个同步处理策略,它继承自被她引用的流程的异常策略。

流程和子流程都使用流程引用组件调用。


编辑你的应用。加入一个子流程,移动你的选择路由器默认框中的选项到子流程中处理。要做到这一点,你须要两个构件块加入到你的应用中:
*一个流程參考组件。它调用应用中的还有一个流程。在元素板的组件部分能够找到它 
*一个子流程范围。这会在你的应用创建还有一个流程,您能够參考使用上述流程參考组件。

在元素板的作用域部分找到它。


使用Studio的可视化编辑器移动消息处理器到一个子流程是特别easy做到。
1、按住Shift,并在选择范围的默认框中。单击三个消息处理器,这样。它们三个会突出显示,然后右键单击并选择解压到.子流程。



2、Studio将提示你命名你的子流程。

你能够给它任意起一个唯一的名称。本演示样例使用名称CBR_TutorialFlow2。

3、Studio在你的现有流程下创建子流程,以流程參考组件替换默认框中的内容。


您的完整的应用程序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/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">
<logger message="No language specified. Using English as a default." level="INFO" doc:name="Logger"/>
<set-variable variableName="language" value="English" doc:name="Set Language to English"/>
<set-payload value="Hello!" doc:name="Reply in English"/>
</sub-flow>
</mule>

保存你的项目,并观察控制台,由于它又一次部署你已经改变的应用。

反复上述步骤中的使用的应用程序。上面的。


你会注意到,结果和上次相比并没有不论什么变化。 组织这三个消息处理器到一个子流程,然后用流程引用组件调用该流程并没有相应用的功能造成影响。然而。正如你将在以下的附加任务部分看到的,分离出分支处理部分,使之成为子流程能够帮助你的代码保持(和Studio画布上的可视化表示形式)整齐。易于阅读。有关怎样使用多个流程或子流程来组织你的应用的一些实际的使用案例。去看一些中等和高复杂性的Mule样例,如在Foreach中处理和路由选择实例。

今天累了,先到这吧,改天继续



Mule ESB-Content-Based Routing Tutorial(2)的更多相关文章

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  2. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  5. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  6. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...

  7. Hive Tutorial(上)(Hive 入门指导)

    用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...

  8. 论文阅读笔记五十二:CornerNet-Lite: Efficient Keypoint Based Object Detection(CVPR2019)

    论文原址:https://arxiv.org/pdf/1904.08900.pdf github:https://github.com/princeton-vl/CornerNet-Lite 摘要 基 ...

  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一)

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...

随机推荐

  1. Recall(检出率)和 Precision(准确性)

    这两个方面是模式识别和信息检索使用措施值. 浅显易懂的理解,用以下的图片和公式最好只是. 那么 - 召回率R:用检索到相关文档数作为分子.全部相关文档总数作为分母.即R = A / ( A + C ) ...

  2. iis10 HTTP 错误 500.19 - Internal Server Error

    HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息: 模块    IIS Web Core 通知    未知 ...

  3. 使用BackgroundWorker组件进行异步操作编程

    本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述.在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等 ...

  4. C# WinForm多线程(一)Thread类库

    Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括 ...

  5. Code::Blocks项目配置基础

    File 菜单 New :新建( Empty file/file . class . project . build target ) . Recent projects/files :近期打开的项目 ...

  6. 第九讲:HTML5该canvas推箱子原型实现

    <html> <head> <title>动</title> <script src="../js/jscex.jscexRequire ...

  7. 如何使用Eclipse API 提供 org.eclipse.wst.wsdl 要解决阅读WSDL档?

    相对而言.Eclipse API中国的数据是比较小的.但Eclipse的API提供了许多的.非常强大. 实例,eclipse的Eclipse API 提供 org.eclipse.wst.wsdl包裹 ...

  8. c# socket udp广播

    一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...

  9. OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法

    <span style="font-size:24px;">//////第一种方法 //        NSMutableArray *arr = [NSMutable ...

  10. SpringMVC源码解析- HandlerAdapter - ModelFactory(转)

    ModelFactory主要是两个职责: 1. 初始化model 2. 处理器执行后将modle中相应参数设置到SessionAttributes中 我们来看看具体的处理逻辑(直接充当分析目录): 1 ...