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

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

1 系统集成方式的演变

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

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

1Spaghetti Integration

 WSO2 ——(7)ESB功能:协议转换_第1张图片

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

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

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

2ESB集成

 WSO2 ——(7)ESB功能:协议转换_第2张图片WSO2 ——(7)ESB功能:协议转换_第3张图片

 


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,在目录/repository/conf/axis2,axis2.xml文件仅在服务器启动时被加载到内存,因此文件的任何改变只有重启服务器才生效。其中部分是配置transport,HTTPHTTPS transport默认已经配置。下面以http与jms协议的转换来介绍ESB协议的配置及使用。


3 httpjms转换示例

3.1 准备

3.1.1 配置使用JMS协议

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

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


        
         org.apache.activemq.jndi.ActiveMQInitialContextFactory
         tcp://localhost:61616
         TopicConnectionFactory
topic
        
 
        
         org.apache.activemq.jndi.ActiveMQInitialContextFactory
         tcp://localhost:61616
         QueueConnectionFactory
    queue
        
 
        
         org.apache.activemq.jndi.ActiveMQInitialContextFactory
         tcp://localhost:61616
         QueueConnectionFactory
    queue
        

 


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>jmstransport>

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 创建代理服务

 WSO2 ——(7)ESB功能:协议转换_第4张图片

 

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

详细配置见NotaryProxy.xml

3.3 测试

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

 WSO2 ——(7)ESB功能:协议转换_第5张图片

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

 WSO2 ——(7)ESB功能:协议转换_第6张图片

 

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

 

你可能感兴趣的:(wso2)