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

1 系统集成方式的演变

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

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

(1)Spaghetti Integration

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

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

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

(2)ESB集成

2 协议转换

不同系统使用不同协议,比如现在的tuxedo中间件他向外暴露的有服务,他的服务是一种特殊格式的协议、A系统使用的EJP、B系统使用的webservice、C系统使用的servlet、D系统使用的email、E系统使用的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 builders。WSO2 ESB包含基于文本的Message builders和基于二进制的Message builders(A->XML、B->XML……)。

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

可以使用axis2框架实现新的Message builders、Message formatters。

参阅协议转换(Working with Transports)

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

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

3 http与jms转换示例

3.1 准备

3.1.1 配置使用JMS协议

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

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

[html] view plaincopy
  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. <parameter name="myQueueConnectionFactory" locked="false">
  9. <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
  10. <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
  11. <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
  12. <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
  13. </parameter>
  14. <parameter name="default" locked="false">
  15. <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
  16. <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
  17. <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
  18. <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
  19. </parameter>
  20. </transportReceiver>
  21. <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 拷贝下列3个jar包到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,因为WSO2是OSGI的,功能可以轻松的添加和卸载。具体添加方法参见“WSO2 ESB添加功能组件”。

3.2.2 创建服务端点

详细配置见NotaryEndpoint.xml,URL如下:

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服务NotaryService,ESB从NotaryService接收响应并通过http协议返回给客户端。

详细配置见NotaryProxy.xml

3.3 测试

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

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

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

WSO2 ——(7)ESB功能:协议转换相关推荐

  1. wso2 esb_WSO2 ESB的一种消息传递方式

    wso2 esb 正如我之前在WSO2 ESB工作时所发布的那样. 为了更好地理解此ESB,我一直在浏览示例 (尚未完成所有示例 ). 示例12是关于与ESB的单向消息传递,并使用TCP监视器使其可见 ...

  2. MULE ESB功能介绍

    Mule是一个企业服务总线(ESB)消息框架.它的主要特性包括: 1.基于J2EE1.4的企业消息总线(ESB)和消息代理(broker). 2.可插入的连接性:比如Jms,jdbc,tcp,udp, ...

  3. NRF52832之ESB功能与NRF24L01进行2.4G通信

    NRF52之ESB学习笔记 目的:为了能与NRF24L01通信,工程中加入nrf_esb.c, nrf_esb.h 先了解RADIO的各种工作状态及流程 1状态 RADIO的工作状态: DISABLE ...

  4. WSO2 ESB(5)

    WSO2的应用服务器 WSO2的应用服务器是基于WSO2 Carbon平台的企业级就绪的应用程序服务器.继承的WSO2 Web服务应用服务器(WSAS),WSO2的应用服务器(AS)支持除了其Web服 ...

  5. ESB(企业服务总线)相关知识点总结

    目录 一.什么是ESB 二.ESB解决了什么问题以及什么是HSB 三.市面上 ESB产品有哪些?如何选择 四. 如何实现ESB的各个功能 1.ESB的服务接入方式? 2.ESB的如何进行协议转换? 3 ...

  6. 万字长文解析:分布式架构、SOA、微服务架构、API网关、ESB服务总线架构之间的关联及演进

    1架构演进 架构十五年:改变的是形态,不变的是目的 业务驱动架构形态变化 过去十几年,随着互联网发展以及业务的多样化,系统的架构也在不断发生变化,总体上来说大体经历了从单体应用架构-垂直应用架构-分布 ...

  7. 对ESB概念的理解(转)

    http://www.ibm.com/developerworks/cn/webservices/0811_magy_esb/ 什么是 ESB?ESB 严格来说不是某一个产品,而是一种框架,设计模式. ...

  8. esb 和mq_使用保险丝结构管理MQ和ESB的大型部署,第一部分

    esb 和mq FuseSource最近发布了ActiveMQ和ServiceMix发行版的企业版. 其中的一些主要功能包括增量修补 , 自定义平台安装程序和第三方验证 . 新企业版附带的最酷的功能之 ...

  9. 使用保险丝结构管理MQ和ESB的大型部署,第I部分

    FuseSource最近发布了ActiveMQ和ServiceMix发行版的企业版. 其中一些重要功能包括增量修补 , 自定义平台安装程序和第三方验证 . 新企业版附带的最酷的功能之一是Fuse Fa ...

最新文章

  1. Java实战应用50篇(一)-Java并发编程:volatile关键字解析
  2. Java 设计模式之观察者模式
  3. k8s安装部署步骤_30分钟无坑部署K8S单Master集群
  4. 10亿个数中找出最大的10000个数
  5. hat怎么安装mysql_Red Hat Enterprise Linux中怎么安装Mysql+apache+php+zend
  6. 学习STP的一些总结
  7. 27.Qt操作sqlite3数据库
  8. android小米通知不显示电量,Android开发笔记——小米通知‘坑’ app的通知一直显示在不重要通知里 ......
  9. SpringCloud学习笔记012---SpringBoot启动时Caused by: java.lang.NoClassDefFoundError:
  10. TIOBE 4月编程语言排行榜:MATLAB即将跌出TOP 20
  11. 【图像重建】基于matlab卷积神经网络的图像超分辨率重建【含Matlab源码 1816期】
  12. ubuntu16.04安装iNode客户端简易教程
  13. 北京大学数学科学学院2006\9\20声明:坚持真理、追求卓越zz
  14. CSDN博客QQ加群、微信
  15. Linux之旅 - 入⻔命令集 - 文件管理(1/2)
  16. 手机电池校正代码_手机电池校正!iPhone手机电池校正设置
  17. 【C语言】C语言笔记
  18. 12306的自动化登录
  19. Visual Studio 2017 下载地址 V15各种版本官方下载网址
  20. 自行车无级变速器设计

热门文章

  1. DP/eDP协议学习--协议简介
  2. 小程序的踩坑-持续更新-建议收藏
  3. 超越C++标准库:Boost库导论电子书PDF下载
  4. [转载]JavaFX制作地图编辑器
  5. Android多媒体支撑库OpenCore视频硬件加速
  6. 第十一届蓝桥杯 C/C++ 大学A组/研究生组 E题 咫尺天涯dp做法
  7. 配置J2ME开发环境 Eclipse、eclipseME、WTK
  8. c盘打开注册表修改系统语言,注册表修改c盘卷标
  9. 心理力学·《厚黑学全书》
  10. HTML修改单选框多选框按钮样式