WSO2 ——(7)ESB功能:协议转换

这篇文章介绍如何通过WSO2 ESB实现协议转换的功能:通过 WSO2 ESB 实现SOAP/HTTPJMS之间的协议转换,实现客户端与 ESB 之间 request/response 的交互方式。

1 系统集成方式的演变

如果你只有两个系统,不用折腾ESB

如果你有多个系统,而且这些系统还是异构的,比如有些是Java开发的、有些是.net开发的、有些还是C/S的比如是tuxedo、还有些是成熟产品如SAP 。如何集成?

1Spaghetti Integration

 

传统的解决方式:意大利面条式集成。

由于历史的原因,每个部门都建立了自己的系统。随着新的业务需求的显现,其结果就是一堆各自为营的、条块分割的系统。然后,当系统间需要共享数据时,就加入新的点对点的接口来解决系统集成的需要。随着人们使用系统,他们发现自己需要另一个系统的数据,结果又是一个点对点的集成。最终形成了意大利面式的集成。

这种集成方式可维护性、可扩展性、 故障检测和系统管理都存在问题,为避免意大利面式集成造成的问题,ESB出现了。

2ESB集成

 

 


2 协议转换

不同系统使用不同协议,比如现在的tuxedo中间件他向外暴露的有服务,他的服务是一种特殊格式的协议、A系统使用的EJPB系统使用的webserviceC系统使用的servletD系统使用的emailE系统使用的RMI等等ESB是如何实现不同协议间的转换的呢?

WSO2 ESB 支持所有广泛使用的传输协议,如HTTP, HTTPS, POP, IMAP, SMTP, JMS, AMQP, FIX, TCP, UDP, FTP, FTPS, SFTP, CIFS, MLLP, SMS. Transport负责传输指定格式的消息。一个新的传输协议使用Axis2传输框架可以轻松地被添加和插入到ESB中。

Transport包含两个组件:

(1)Message builders:根据内容类型识别消息并转化为XML格式。每一种内容类型都有相应的Message buildersWSO2 ESB包含基于文本的Message builders和基于二进制的Message buildersA->XMLB->XML……)。

2Message formatters:与Message builders相反。XML格式的消息转化为传到Transport前消息的格式(XML->AXML->B……)

可以使用axis2框架实现新的Message buildersMessage formatters

参阅协议转换(Working with Transports

所有的transport都是基于Apache Axis2 transport框架。这个框架提供两个接口,每一个transport必须实现这两个接口,一个receiver,一个sender。配置管理Transport listenerssenders是相互独立的,比如你可以使JMS transport sender可用,而JMS Transport listener不可用。

Wso2 carbon 和所有基于carbon的产品有一个全局配置文件axis2.xml,在目录<PRODUCT_HOME>/repository/conf/axis2,axis2.xml文件仅在服务器启动时被加载到内存,因此文件的任何改变只有重启服务器才生效。其中<transportReceiver><transportSender>部分是配置transport,HTTPHTTPS transport默认已经配置。下面以http与jms协议的转换来介绍ESB协议的配置及使用。


3 httpjms转换示例

3.1 准备

3.1.1 配置使用JMS协议

所有协议的配置都在esb/repository/conf/axis2/axis2.xml文件中。

若使用activemq,JMS协议配置如下:

[html]  view plain  copy
  1. <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">  
  2.         <parameter name="myTopicConnectionFactory" locked="false">  
  3.          <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>  
  4.          <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>  
  5.          <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>  
  6. <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>  
  7.         </parameter>  
  8.    
  9.         <parameter name="myQueueConnectionFactory" locked="false">  
  10.          <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>  
  11.          <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>  
  12.          <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>  
  13.     <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>  
  14.         </parameter>  
  15.    
  16.         <parameter name="default" locked="false">  
  17.          <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>  
  18.          <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>  
  19.          <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>  
  20.     <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>  
  21.         </parameter>  
  22. </transportReceiver>  
  23.  <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender"/>  


3.1.2 启动activemq 

http://activemq.apache.org/下载,解压,运行bin/activemq.bat

 

3.1.3 启动WSO2 ESB

activemq 5.7.0 拷贝下列3jar包到esb/repository/components/dropins,其他版本activemq还需要其他包,如activemqmq 5.9.1还需要activemq-client-5.9.1.jar、hawtbuf-1.9.jar

l activemq_core_5.7.0_1.0.0.jar

l eronimo_j2ee_management_1.1_spec_1.0.1_1.0.0.jar

l geronimo_jms_1.1_spec_1.1.1_1.0.0.jar

运行bin/wso2server.bat

3.2 开发

3.2.1 创建后台axis2服务

具体开发部署方法参见http://blog.csdn.net/szh1124/article/details/42125065,代码参见NotaryService.java

注意,这个服务通过JMS协议通信,  /src/main/resources/META-INF/services.xml需要配置.

<transports>

   <transport>jms</transport>

</transports>

开发完成部署到WSO2 Application Server,当然,也可以将wso2 Application Server部署AAR服务的功能添加到WSO2 ESB,因为WSO2OSGI的,功能可以轻松的添加和卸载。具体添加方法参见“WSO2 ESB添加功能组件”。

3.2.2 创建服务端点

详细配置见NotaryEndpoint.xmlURL如下:

jms:/JMSNotaryService?transport.jms.DestinationType=queue&transport.jms.ContentTypeProperty=Content-Type&java.naming.provider.url=tcp://localhost:61616&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&transport.jms.ConnectionFactoryType=queue&transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory

3.2.3 创建代理服务

 

 

客户端发送http请求到通过ESB的代理服务,ESB转发请求消息到后台jms服务NotaryServiceESBNotaryService接收响应并通过http协议返回给客户端。

详细配置见NotaryProxy.xml

3.3 测试

点击NotaryProxy后面的“尝试调用本服务”,输入“李四”,如下图所示:

 

通过monitor/soap tracer可以看到NotaryProxy代理服务调用了后台JMSNotaryService

 

 

 示例相关配置下载http://download.csdn.net/detail/szh1124/8295673

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值