一步步了解ESB (二) Mule ESB-Basic Studio Tutorial
这次演练的目的是向您介绍Mule Studio(基于eclipse的集成开发工具),并帮助您轻松地创建自己的应用。
本教程本教程将引导您如何使用 Mule Studio 构建一个简单的HTTP请求 - 响应的应用程序。创建并在本地运行该示例后,您将能够应用你所学到的知识创建更复杂的应用。
内容:
一、假设
二、目标
三、启动Mule Studio
四、创建一个新项目
五、创建Mule流程图
六、配置流元素
七、运行应用程序
八、使用应用程序
九、停止应用程序
十、编辑应用 程序
十一、额外的加分任务
十二、更进一步
一、假设
本教程假定您已经下载并安装了 Mule Studio 。如果你先前没有任何使用Eclipse或基于Eclipse的IDE的经验,请查看简要介绍Mule Studio的页面。
二、目标
在本教程中,您的目标是:
1、使用Mule Studio创建拥有单个流程的应用程序:
1)接收一个HTTP请求
2)记录该请求的内容
3)将修改后的内容作为http响应
2、在嵌入Mule Studio的本地运行环境中运行该应用程序
3、使用你的浏览器测试你的应用程序
4、停止应用程序。
5、编辑应用程序,然后重新运行它。
6、(可选)用你的知识迎接一个额外的挑战。
三、启动Mule Studio
如果你在安装Mule Studio时已经运行了Mule Studio,请跳过本节的其余部分,直接进入创建新项目。
1、导航到您安装Mule Studio的本地驱动器上的目录。
2、双击可执行文件来启动 Mule Studio 。
在Windows 中,是MuleStudio.exe
在Mac OS中,是 MuleStudio.app
在Linux中,是 MuleStudio
3、当 MuleStudio 弹出了Workspace Launcher对话框,单击确定以接受默认的工作空间。
4、如果这是你第一次运行Mule Studio,你可能会看到一个欢迎屏幕。点击创建一个项目来关闭屏幕,并直接跳转到新的Mule Project向导
四、创建一个新项目
1、除非新建项目向导已经打开,否则,单击File> New>mule项目。
2、Studio将打开新的Mule Project向导。在名称字段中填入值Basic Tutorial。
3、选择服务器运行时环境,以便部署你的应用程序。MuleStudio会自动将下载MuleStudio时附带的默认服务器中的一个填入服务器运行时域。您可以更改为不同的运行环境,如果你愿意的话,但这个项目必须适用于这些运行环境。欲了解更多有关安装额外运行时环境的版本,请参阅安装扩展。
1、单击完成,创建项目。
2、在包浏览器中,Basic Tutorial.mflow出现在流文件夹内,Mule project.xml出现在src文件夹下面。
这个.MFLOW文件存储流信息供可视化编辑器编辑。当你的新项目第一次打开,Mule Studio会自动打开.MFLOW文件,将显示一个空白的画布。
了解更多有关.MFLOW和Mule的project.xml文件 的信息
.MFLOW文件是Mule Studio特有的文件,用来在可视化编辑器画布呈现上您的项目流程信息。此文件在Mule Studio之外是不起作用的,不应该被提交到源代码控制系统,如git或svn。相反,分享实际的project.xml文件,每个<NAME>.MFLOW文件在src/main/project.XML中都有一个对应的<NAME>,使用此文件可以共享并提交您的项目。
Mule-project.xml文件是Mule项目描述符文件。打开这个文件改变项目运行时环境,设定或编辑环境变量,或编辑该项目的描述。为避免错误,共享你的项目时,提交该文件,连同您的<NAME>.xml文件到您的源代码控制系统。
五、创建Mule流程图
在本教程中,你的目标是建立接收一个HTTP请求,记录该请求的内容,将修改后的内容作为http响应的应用程序。您可以使用Studio中三大基石构建这个应用程序:
HTTP endpoint | 让你的Mule应用程序通过HTTP或HTTPS协议连接到Web资源;在元素板的端点部分找到这个端点 |
Logger | 根据mule表达式的值记录日志信息或活动;在元素板的组件部分找个这个组件 |
Set Payload Transformer | 修改http内容为Hello,World; 在元素板的转换器部分找到这个转换器 |
拖放这三个构件块到画布上,可直观地构造你的流程,显示的顺序如下:
提示:使用元素板过滤器
请注意,在元素板上,每个类别中的构建块按字母顺序排列。为避免滚动,使用选项板的右上角的过滤器工具可以更快速地找到你想要构建块。
六、配置流元素
几乎所有的Mule元素提供配置选项,您可以通过以下两种方式之一设置:
1、通过在Studio的可视化编辑器的构建块属性选项卡
2、通过在Studio的XML编辑器中XML代码
以下说明向您介绍在两个编辑器中如何配置。
在你的流程图中单击HTTP构建块来打开它的属性编辑器。默认情况下,端点被设置为请求 - 响应交换模式。这意味着,Mule处理完流程后,将响应返回端点。默认情况下,主机设置为localhost和端口为8081。
在画布的底部,单击配置XML切换到XML编辑器视图。
可以看到消息流画布和配置XML视图中显示的默认配置是相同的:
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/>
说明:name属性对应出现在消息流画布上的构件块图标下方的显示名称。
3、仍然在XML配置视图,端口属性的值更改为8084。
4、点击消息流切换回可视化编辑器。
5、单击HTTP构件块重新打开其属性编辑器,并注意端口字段现在反映的是更新值8084。您可以在任何编辑器修改这个值,只要你来回切换,Studio的双向编辑器会自动更新配置。
6、点击 Logger 构件块(或使用键盘上的向右箭头)的属性编辑器切换到Logger组件。
7、在消息字段中,输入:当前内容为#[message.payload]。
该字符串#[message.payload]是一个简单的mule表达式,计算结果为消息的内容,因为它在流程中传递。当你需要在你的流程中追踪消息内容时,包含这个讯息可以指示Mule在不同的点把该信息记录在应用程序日志文件中。它可以在更复杂的用例中得以应用。
8、单击设置logger构件块(或按键盘上的右箭头)的属性编辑器切换到 logger 转换器。
9、请注意,该值字段包含以下字符:#[]
10、在值字段中,输入以下内容:
#['你好'+ message.payload+“。今天是“+ server.dateTime.format(”日/月/年')+''。 ]
需要注意的是message.payload和server.dateTime.format(“日/月/年”)都是Mule表达式。因为你是在一个较大的mule表达式中输入它们,不需要围绕这些个人表达的: 语法。您的#[]语法是不是骡子表情里面输入任何内容必须包含用引号,这样mule把它读成一个字符串。你在#[]中输入的任何东西,如果它不是一个mule表达式,那么它必须用引号括起来,这样mule才会把它当做字符串解析。
11、通过单击文件>来保存您的应用程序。
您的完整的应用程序XML,一旦配置,应该如下所示:
- <?xml version="1.0" encoding="UTF-8"?>
- <mule xmlns:http="http://www.mulesoft.org/schema/mule/http" 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.0" 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">
- <flow name="Basic_TutorialFlow1" doc:name="Basic_TutorialFlow1">
- <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8084" doc:name="HTTP"/>
- <logger message="Current payload is #[message.payload]" level="INFO" doc:name="Logger"/>
- <set-payload value="#['Hello, ' + message.payload + '. Today is ' + server.dateTime.format('dd/MM/yy') + '.']" doc:name="Set Payload"/>
- </flow>
- </mule>
七、运行应用程序
完成创建,配置,并保存你的新的应用程序,您就可以在嵌入Mule的服务器上运行(包括在Mule Studio中,作为捆绑下载的一部分)。
1、在Package Explorer窗格中,右键单击Basic Tutorial.mflow文件,然后选择Run As>Mule Application。 (如果您还没有保存,Mule会提示您现在保存。)
2、Mule会立即显示运行进度齿轮,开始您的应用程序,并让它运行。当启动过程完成后,MuleStudio读取控制台会显示一条消息,启动应用程序“basic_tutorial”。
八、使用应用程序
1、打开任何一个网页浏览器,然后导航至http://localhost:8084/world ,
2、您的浏览器会显示一条消息,上面写着,Hello, world 。Today is[今天的日期。
3、在浏览器的地址栏中,用你自己的名字替换 world 这个词,然后按回车键。
4、您的浏览器会显示相同的消息,但包括的不是“world”而是你的名字。
接下来,检查你的Mule Studio控制台来验证Mule记录的内容之前的消息到达表达式转换器。
将光标放置在控制台窗口中,按Ctrl + F或Command + F打开查找对话框,然后搜索当前内容。寻找对应于您在浏览器中输入的内容。例如:
INFO 2013年8月21日09:22:26,446 [ [ basic_tutorial ] connector.http.mule.default.receiver.02 。 ] org.mule.api.processor.LoggerMessageProcessor :当前内容
您还可以看到一些其他的结果“ /的favicon.ico ”的内容。这些结果是由浏览器自动生成的。你可以通过编辑部分应用程序来过滤掉这些结果,如下。
恭喜!你已经运行和测试您的应用程序!
您通过您的Web浏览器提交请求到应用程序的入站端点。
Mule应用程序收到您的请求,并记录内容(不管你在http://localhost:8084/之后键入什么)到控制台。
然后,应用程序在发送的消息上设置内容,将结果返回给你的HTTP端点。
九、停止应用程序
要停止应用程序,单击在控制台面板上方的红色正方形终止图标。
十、编辑应用
您可能已经注意到,每次刷新,您的浏览器都插入额外内容“/ favicon.ico”。你可以添加一个过滤器组件到您的流程,排除这些内容。具体方法如下:
1、定位到HTTP端点和接收器之间,拖入一个表达式过滤器到你的画布
2、点击表达式过滤器以打开其属性选项卡,然后在表达式字段中输入以下内容:
#[message.payload!='/favicon.ico']
这个表达式告诉Mule检查消息内容中不等于字符串' /favicon.ico"的部分 。如果表达式的值为true ,Mule传递消息到流中的下一个步节点。如果表达式计算为false ,Mule停止处理该消息。
3、保存您的应用程序,然后再次运行它。 (在你的包资源管理器,右键单击Basic Tutorial.mflow,然后单击运行方式>Mule Application。 )
4、等待,在控制台,读取到消息,开始应用' basic_tutorial “ 。
5、返回到您的Web浏览器并转到http://localhost:8084/world
6、选择你自己的词替换掉world。用不同的词语重复此步骤数次。
7、检查您的控制台得到的内容:将光标放置在控制台窗口中,按Ctrl + F或Command + F打开查找对话框,然后搜索当前内容。
8、你看到的所有内容应与您在浏览器中输入的相同,/ favicon.ico应该不再被包括在内。
您的完整的应用程序XML,一旦编辑过,应该如下所示:
- <?xml version="1.0" encoding="UTF-8"?>
- <mule xmlns:http="http://www.mulesoft.org/schema/mule/http" 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.0" 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">
- <flow name="Basic_TutorialFlow1" doc:name="Basic_TutorialFlow1">
- <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8084" doc:name="HTTP"/>
- <expression-filter expression="#[message.payload != '/favicon.ico']" doc:name="Expression"/>
- <logger message="Current payload is #[message.payload]" level="INFO" doc:name="Logger"/>
- <set-payload value="#['Hello, ' + message.payload + '. Today is ' + server.dateTime.format('dd/MM/yy') + '.']" doc:name="Set Payload"/>
- </flow>
- </mule>
十一、额外的加分任务
现在,你已经知道了mule studio的工作方式,尝试运用你的知识,完成一个额外的任务。修改您的应用程序,这样,除了像现在这样,转化的消息内容,响应http请求,返回到您的浏览器。Mule还可以做:
记录的Mule自动分配给每个流消息的唯一消息ID ,将浏览器中显示的消息内容写到本地文本文件中,使用消息ID命名每一个文本文件
要做到这一点,你需要把另外一个消息处理器添加到您的流程,让Mule直接把消息内容写到一个文件中。
您还需要使用您以前没见过的另一个Mule表达式,以使用唯一的消息ID,如果你需要帮助,使用下面的提示。
提示 :
1、 我如何记录消息ID?
Mule表达式通过#[message.id]解析当前消息的唯一ID
2、 我怎样将消息写入一个文件?
尝试在你的流程中的设置消息内容转换器后增加一个文件端点。
3、我如何使用消息的ID命名文件?
在输出模式字段中填入文件端点,告诉Mule如何命名文件和要使用的文件类型。请注意,您可以在这里使用相同的Mule表达您用来记录消息ID。
查看答案,包括步骤说明和完整的代码:
还有就是要实现上述目标的方法不止一种,但下面介绍的最快方法。
1、点击你的现有Logger组件,打开其属性选项卡。
2、修改消息字段改为: 当前的消息内容为#[message.payload]和消息ID为#[message.id]
(如果你愿意,你可以改用一个新的Logger组件记的消息ID在一个单独的步骤。如果你选择这样做,第二个Logger组件可以在任何地方在表达式过滤器后,流放置。)
3、拖放一个文件端点到你的画布,设置在消息内容转换器之后。
4、点击文件端点,打开属性编辑器。
5、输入您要Mule创建文件的路径。例如: /应用程序/ muleStudio /例子/ BasicTutorial
6、输入输出模式定义文件名和类型,如下所示: # [ message.id ].TXT
查看修改后的应用程序代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:http="http://www.mulesoft.org/schema/mule/http" 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.0" 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/file
- http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
- http://www.mulesoft.org/schema/mule/ee/tracking
- http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
- <flow name="Basic_TutorialFlow1" doc:name="Basic_TutorialFlow1">
- <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8084" doc:name="HTTP"/>
- <expression-filter expression="#[message.payload != '/favicon.ico']" doc:name="Expression"/>
- <logger message="Current payload is #[message.payload] and message id is #[message.id]" level="INFO" doc:name="Logger"/>
- <set-payload value="#['Hello, ' + message.payload + '. Today is ' + server.dateTime.format('dd/MM/yy') + '.']" doc:name="Set Payload"/>
- <file:outbound-endpoint path="/Applications/muleStudio/examples/BasicTutorial" outputPattern="#[message.id].txt" responseTimeout="10000" doc:name="File"/>
- </flow>
- </mule>
7、保存您的应用程序,然后再次运行它。 (在你的包资源管理器,右键单击Basic Tutorial.mflow,然后单击运行方式>Mule Application。 )
8、等待,在控制台,读取到消息,开始应用' basic_tutorial “ 。
9、返回到您的Web浏览器并转到http://localhost:8084/world
10、选择你自己的词替换掉world,刷新浏览器。
11、请检查您的控制台,使用find命令,查看已记录的消息内容和消息ID来确认Mule已经成功记录您所使用的浏览器发出的每个消息。
12、导航到您在第五步上面定义的本地驱动器上的文件夹。
13、您的文件夹应该包含.txt文件。打开txt文件,并确认:
a、消息内容,即您在浏览器中观察到的;
b、该文件名对应的消息ID记录在您的控制台