回首项目中用mule的过程
来源:互联网 发布:chanel赠品围巾 知乎 编辑:程序博客网 时间:2024/06/05 01:52
首先从flow说起
它是Mule ESB 3.0引入的一个新的概念,它泛指一个模块化的操作系统,它包含之后提到的所有部件,它是一个母体。在3.0之前是service,然而3.0的flow有着比service更强大、灵活、易于使用的特点。
它是一个母体从这个地方进入,然后通过入口地址 访问相应的url,指定它的服务交互模式。然后进入到下一层进行判断 从而进行对消息的格式转换,如果是xml格式则进入到xmlRequestTransformer中去处理消息,这里有一个requestMessage来处理这个消息 它包含了传入来的消息的属性和实体,并通过传进来的消息来赋予属性的值 这里则转换成请求消息,其中也包含了很多验证
然后就是inBoundFilter
经过入栈过滤器之后验证ip并用MDC记录了线程包括系统id 服务id以及密码
然后调用相应的 服务 在进入服务之前 必须进行ip验证 身份权限验证服务能力验证。等等一系列的安全措施验证
如果消息通过验证则进入服务 采用动态的脚本调用
<outbound-endpoint address="vm://invoke#[groovy:payload.sid]"
exchange-pattern="request-response" encoding="UTF-8" />
而mule可以根据相应的sid来进入另外的一个配置文件中
并获得相应服务的调用 例如:
<!--智能提速平台查询-->
<flow name="SC2009000">
<inbound-endpoint address="vm://invokeSC2009000" exchange-pattern="request-response"></inbound-endpoint>
<transformer ref="speedUpAttrMessageTransformer"></transformer>
<component>
<method-entry-point-resolver ><include-entry-point method="obsQueryQos"/></method-entry-point-resolver>
<spring-object bean="speedUpService"></spring-object>
</component>
</flow>
在进入服务后有要进行消息的转换 ,将消息转换成自己多需要的message 利用
RequestMessage reqMessage = (RequestMessage) message.getPayload();
SpeedUpAttr su = new SpeedUpAttr();
Map<String,Object> param = reqMessage.getBody();
su.setLatnId((String)param.get(SpeedMessageKey.LATN_ID.getValue()));
将消息转换成对象并对对象的属性进行验证(例如空 还有 01的判断)
这之后将访问对应服务的对应方法
public ResponseBussMessage obsQueryQos(RequestBussMessage reqMessage) throws ServiceException {
// 获取经过转换后的参数
SpeedUpAttr su = (SpeedUpAttr) reqMessage;
// 响应的参数
SpeedUpQueryInfo suResp = null;
这里得reqMessage实际上就是刚才转换成su对象的消息体。,由于要调用第三方接口的信息 我们要根据第三方所需要的信息格式 在我们的程序中进行将消息的封装 转变成他们所需要的信息,例如他们需要的是xml
我们经过一系列的拼装之后就封装成了相应的消息体。。
然后通过mule中的 mulecontext 来调用第三方接口的服务
String rspXml = (String)MuleUtil.invokeVM(mc,"vm://invoke.obs.obsQueryQos", req);首先我们需要第三方给定的wsdl并用ant来生成相应的java类来给我们使用
并且在配置文件中我们需要进行服务的配置
port以及方法我们都能从需求和给定的wsdl中获得 地址是第三方给的 class是用wsdl生成类的位置。。这样就能调用通服务了 并返回相应的xml文件 但是客户需要的并不是这个文件 于是我们需要进一步的进行转换
将xml转换成java对象 于是就用到了 xstream
这里需要注意几点
xstream中的自动侦查注解不能少 类比较多的时候一样要在fromXML的时候加上那个参数
xstream.autodetectAnnotations(true);
xstream.processAnnotations(new Class[]{
OBSQueryQosResponse.class,
UseQosQosResponse.class
以及 OBSQueryQosResponse oqrResp = (OBSQueryQosResponse) xstream.fromXML(rspXml,new OBSQueryQosResponse());
还有一个是对于生成的xml中的“__”替换“_”这个也不能少
private XStream xstream = new XStream(new StaxDriver(new XmlFriendlyNameCoder("_-", "_")));
这样我们就完美的获得我们的消息 对象与对象之间的传值我们就得到我们想要的数据
在这个过程之中充分的实现了mule对消息的掌控 是对mule为轻量级的消息框架以及整合平台的有力诠释!
- 回首项目中用mule的过程
- 项目过程中用到的工具
- 项目中用到的
- mule 带项目启动
- 一些我在做项目过程中用到的比较重要的方法
- 这是我最近项目中用到的分页存储过程!希望有用!
- 再来一个SqliteHelper,项目中用的
- 项目中用到的开源库
- 项目中用到的工具
- 项目中用到的css
- 项目管理一年 小回首
- 我开发过程中用到的工具
- qt学习过程中用到的网址!
- 开发过程中用到的QSS
- ESB构架的MULE
- mule的学习
- mule部署的学习
- Mule的安装配置
- 匿名内部类、内部类、嵌套类
- 技术人员的起码要求就是不能固步自封,要始终以开放的心态接受新技术
- js压缩 --- YUI Compressor
- 【多媒体封装格式详解】---MKV【1】
- 解决httpclient传中文乱码问题
- 回首项目中用mule的过程
- 规模最大又如何?还是不赚钱。互联网的未来生态系统肯定是由平台和内容提供商构成
- C++ 第十一周任务-百钱百鸡
- JAVA调用脚本并传输流数据(java调用rrdtool并传输到页面展示)
- 看似简单的scanf
- Android Sqlite中row id的应用
- 程序员技术练级攻略
- 红球白球黑球
- MyEclipse快捷键大全