在xml的汪洋中遨游之mule篇

来源:互联网 发布:linux显示文件大小 编辑:程序博客网 时间:2024/04/29 22:52
 

mule号称开源ESB的最好实现,研究mule也有段时间了, 在“浩如烟海”的xml配置中,保持清醒的头脑确实不容易。
 作为学习笔记之一,记录一下一个mule简单应用的实现。

需求:给指定的email地址发送邮件.

 一:基本实现:

 1: 实现命令行输入发送email:
 为了能在命令行接受输入, 需要配置一个输入输出连接器:

  

2:配置一个UMO,把输入的内容放入一个队列:

 

        outbound节点的配置, 把输入的内容(String) 路由到一个叫“content”的queue中, 此queue为jvm中的内存队列。
3:配置一个UMO,实现发送email:

        其中inbound的配置为contentUMO的outbound, contentUMO和EmailBridge这个两个UMO通过名称为“content”的queue连接起来, 实现通讯。EmailBridge接收到输入后, 会依次通过ContentToEmail, StringToMimeMessage两个transformer进行内容的转换。
        BTW:为了在mule中使用smtp, 需要在xml的namespace中声明:

xmlns:smtps="http://www.mulesource.org/schema/mule/smtps/2.1" 

        mule有很多对于具体协议的transport实现,每一个transport的实现作为一个jar包存在(比如mule-transport-email-2.1.2.jar), 在jar中的META-INF/spring.schemas文件中, 写明了xsd文件的对应关系, META-INF/sping.handers配置了相关命名空间的handle class, 可以据此在mule的配置文件中声明命名空间.
        完整的mule配置文件如下:

相关class如下:
自定义消息转换器:

自定义smtp连接器(smtp connector):

运行此程序, 根据提示, 在命令行输入:

二: 升级:增加一个component.

修改UMO:EmailBridge配置, 增加一个component:

    注意到增加了一个component, 接受命令行的输入(String), 产生一个EmailModel的对象.之后,这个EmailModel对象进入outbound, 并经过
emailModelToString, StringToMimeMessag的处理, 最后发送出去.
其中emailModelToString是新添加的一个自定义transformer:

相关class如下:
EmailModel.java:

EmailComponent.java
需要说明的是:
mule默认采用方法参数类型匹配策略, 所以, 如果有String类型的输入, foo方法自动调用, 也可以详细指定调用哪个方法,比如以下配置明确指定调用component的foo方法:

EmailModelToString.java

三:继续升级:不满足于在命令行输入, 需要在浏览器输入, 也就是发布一个http接口。
修改contentUMO如下:

        通过http请求得到输入参数, 经过HttpRequestToString的转换, 放入“content” queue, 为了和content中的数据格式匹配,在浏览器中按如下方式输入:
        http://localhost:9999?email=lichunlei@mycompt.com.cn,hello
        新增了一个class:
HttpRequestToString.java

使用心得:除了xml,还是xml. 如果没有图形化的配置工具, 使用起来还是很麻烦的。对于mule的开发, 主要做component和transfer的开发.至于其他好处, 有待进一步学习。


原创粉丝点击