




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MULE ESB 配置(三)目录-1. 同步2. 将消息传递到另一个端点3. 过滤消息4. 将多个出站端点链接在一起5. 消息分解6. 处理消息仅有一次7. 通过组件绑定调用外部服务mule号称开源ESB的最好实现,研究mule也有段时间了, 在“浩如烟海”的xml配置中,保持清醒的头脑确实不容易。作为学习笔记之一,记录一下一个mule简单应用的实现。需求:给指定的email地址发送邮件.一:基本实现:1: 实现命令行输入发送email:为了能在命令行接受输入, 需要配置一个输入输出连接器:12:配置一个UMO,把输入的内容放入一个队列:servicename=contentUMO 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=/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配置文件如下:Thisisasimplecomponentexamplethatdemostrateshowtosendae-mail 相关class如下:自定义消息转换器:publicclassContentToEmailTransformerextendsAbstractTransformerOverrideprotectedObjectdoTransform(Objectsrc,Stringencoding)throwsTransformerExceptionStringbody=(String)src;Stringmsg=body.split(,);Stringemail=msg0;Stringcontent=msg1;RequestContext.getEventContext().getMessage().setProperty(MailProperties.TO_ADDRESSES_PROPERTY,email);System.out.println(Sentemailto+email+,content:+content);returncontent; 自定义smtp连接器(smtp connector):publicclassSmtpConnectorextendsorg.mule.transport.email.SmtpsConnectorOverrideprotectedvoidextendPropertiesForSession(Propertiesglobal,Propertieslocal,URLNameurl)super.extendPropertiesForSession(global,local,url);local.setProperty(mail.smtp.starttls.enable,true);local.setProperty(mail.smtp.auth,true);local.setProperty(mail.smtps.starttls.enable,true);local.setProperty(mail.smtps.auth,true); 运行此程序, 根据提示, 在命令行输入:Pleaseenteremailcontent(emailaddress,contents):,IcomefromWuhancity!二: 升级:增加一个component.修改UMO:EmailBridge配置, 增加一个component: 注意到增加了一个component, 接受命令行的输入(String), 产生一个EmailModel的对象.之后,这个EmailModel对象进入outbound, 并经过emailModelToString, StringToMimeMessag的处理, 最后发送出去.其中emailModelToString是新添加的一个自定义transformer:相关class如下:EmailModel.java:packageco.mule.mail;publicclassEmailModelprivateStringaddress;privateStringcontent;publicEmailModel(Stringaddress,Stringcontent)this.address=address;this.content=content;publicStringgetAddress()returnaddress;publicvoidsetAddress(Stringaddress)this.address=address;publicStringgetContent()returncontent;publicvoidsetContent(Stringcontent)this.content=content;OverridepublicStringtoString()/TODOAuto-generatedmethodstubreturnaddress=+address+,content=+content; EmailComponent.java需要说明的是:mule默认采用方法参数类型匹配策略, 所以, 如果有String类型的输入, foo方法自动调用, 也可以详细指定调用哪个方法,比如以下配置明确指定调用component的foo方法: packageco.mule.mail;importorg.mule.RequestContext;importorg.mule.transport.email.MailProperties;publicclassEmailComponentpublicObjectfoo(Stringinput)Stringmsg=input.split(,);Stringaddress=msg0;Stringcontent=msg1;EmailModelemail=newEmailModel(address,content);System.out.println(createemailmodel:+email);RequestContext.getEventContext().getMessage().setProperty(MailProperties.TO_ADDRESSES_PROPERTY,email.getAddress();returnnewEmailModel(address,content); packageco.mule.mail;importorg.mule.api.transformer.TransformerException;importorg.mule.transformer.AbstractTransformer;publicclassEmailModelToStringextendsAbstractTransformerpublicEmailModelToString()super();this.registerSourceType(EmailModel.class);this.setReturnClass(String.class);OverrideprotectedObjectdoTransform(Objectsrc,Stringencoding)throwsTransformerExceptionEmailModelemailModel=(EmailModel)src;returnemailModel.toString(); 三:继续升级:不满足于在命令行输入, 需要在浏览器输入, 也就是发布一个http接口。修改contentUMO如下: 过http请求得到输入参数, 经过HttpRequestToString的转换, 放入“content” queue, 为了和content中的数据格式匹配,在浏览器中按如下方式输入: http:/localhost:9999?email=,hello 新增了一个class:HttpRequestToString.javapackageco.mule.mail;importorg.mule.api.transformer.TransformerException;importorg.mule.transformer.AbstractTransformer;importorg.mule.util.IOUtils;importjava.io.InputStream;importjava.io.UnsupportedEncodingException;.URLDecoder;publicclassHttpRequestToStringextendsAbstractTransformerprivatestaticfinalStringEMAIL_REQUEST_PARAMETER=email=;publicHttpRequestToString()super();this.registerSourceType(String.class);this.setReturnClass(String.class);publicObjectdoTransform(Objectsrc,Stringencoding)throwsTransformerExceptionreturnextractEmailValue(extractRequestQuery(convertRequestToString(src,encoding);privateStringconvertRequestToString(Objectsrc,Stringencoding)returnsrc.toString();privateStringextractRequestQuery(Stringrequest)StringrequestQuery=null;if(request!=null&request.length()0&request.indexOf(?)!=-1)requestQuery=request.substring(request.indexOf(?)+1).trim();returnrequestQuery;privateStringextractEmailValue(StringrequestQuery)throwsTransformerExceptionStringemailValue=null;if(requestQuery!=null&requestQuery.length()0)intnameParameterPos=requestQuery.indexOf(EMAIL_REQUEST_PARAMETER);if(nameParameterPos!=-1)intnextParameterValuePos=requestQuery.indexOf(&);if(nextParameterValuePos=-1|nextParameterValuePos0)tryemailValue=URLDecoder.decode(emailValue,UTF-8);catch(UnsupportedEncodingExceptionuee)logger.error(uee.getMessage();if(emailValue=null)emailValue=;returnemailValue; 继续在mule的xml汪洋中遨游。向一个vm:queue发送map消息, mule根据map信息, 动态执行sql, 并返回数据.select 的查询mule默认返回map数据.注意: 如果mule采用2.1, jdbc transport的namespase后缀为com, 而不是org, 如果写错,IDE不会提示,程序异常也很奇怪,让我折腾了一个下午:(测试程序:publicclassMyMuleClientTestpublicstaticvoidmain(Stringargs)throwsMuleException/createmuleMuleContextmuleContext;Stringconfig=my-mule-jdbc-config.xml;muleContext=newDefaultMuleContextFactory().createMuleContext(config);muleContext.start();/creatmuleclientMuleClientclient=newMuleClient();Mapmap=newHashMap();map.put(firstName,feng);MuleMessageresponse=client.send(vm:/query,map,null);System.out.println(response=+response.getPayload(); 执行的sql为:SELECTfirst_name,last_nameFROMapp_user
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玛依拉169课件教学课件
- 废弃水窖改造工程方案(3篇)
- 房建工程结算方案(3篇)
- 安全教育线上培训课堂课件
- 安全教育生产培训会课件
- 东莞茶山装修工程方案(3篇)
- 犬伤门诊培训课件
- 牵引站安全培训记录课件
- 安全教育平台课件压缩
- 农业废弃物资源化利用在2025年农业废弃物处理与资源化利用的产业政策研究报告
- 旅行社劳动合同范文3篇
- 2025年污水处理及其再生利用行业研究报告及未来行业发展趋势预测
- 第2课《中国人首次进入自己的空间站》教学设计统编版八年级语文上册
- 15J403-1-楼梯栏杆栏板(一)
- GB/T 19960.1-2005风力发电机组第1部分:通用技术条件
- 生产作业管理讲义
- 二年级上册《树之歌》优秀课件
- 锅炉安全技术规程
- 初中音乐《快乐的女战士》《水草舞》课件
- 易制毒化学品岗位责任制度
- 新人教版小学美术五年级上册教学设计(全册)
评论
0/150
提交评论