Posts Tagged: Servicemix

Apache Servicemix 教程 - EIP基础

有段时间没写这系列文章了,今天“心血来潮”写上一篇. EIP即Enterprise Information Portal. 是ESB领域一个比较重要的概念,事实上不单单是ESB, EIP可以用在很多地方,相对于BPEL更加底层. 关于EIP有一款非常著名的开源产品,也是apache顶级项目之一 Apache Camel http://camel.apache.org/  这里Servicemix对Camel也有专门的JBI封装,并且Servicemix也很推荐使用Apache Camel作为其EIP. EIP的范畴太大(我水平也有限),我们这里只讲在Servicemix里的EIP.  推荐一部EIP经典之作,《Enterprise Integration Patterns 》构架师必备宝典之一. 涵盖了EIP所有的设计模型.Apache Camel就是几乎对这本书所讲到的模型都做了实现.堪称经典中的经典. 本章作为基础,不想扯到Apache Camel上去,只对servicemix自带的eip进行讲解.熟悉以后可以轻松过渡到Apache Camel中去. 开始之前,请确认了解XML相关知识,如Xquery、Xpath、命名空间等. 不了解朋友请先在W3C网站上学习相关知识. http://www.w3school.com.cn/x.asp 打开servicemix-eip文档,可看到其支持的11种路由方式. 就一般应用而已也是足够的了. Content-Based Router 消息内容路由 Message Filter 消息过滤 Pipeline in-only –> in-out 消息桥接. Static Recipient List 多目的消息路由,即one consumer 到 multi provider Static Routing Slip 静态路由规则. 即设定路由线路.使其按照线路一步步走下去 Wire Tap 消息监听路由 XPath Splitter 消息分割路由.即把单一消息切割成多个消息 Aggregator 消息聚合路由.即上面的反过来 Content Enricher 内容再造路由.消息通过此路由可以进行一些额外的交互,比如数据库 R

......

Servicemix  ESB  教程  

Apache Servicemix 教程 - GET/POST传递

   这几天在南京出差,参与一个华为巴西的POC演示项目. 涉及到CRM,OSS,BSS,BA等多个生产系统. 原先项目采用WebLogic作为中间件(浙江电信自己的中间件,部署在Weblogic)上.由于该中间件的局限性,其他系统SOAP传递有点问题, 因此对方简易使用别的ESB产品,已便于支撑项目能够完成.    CRM系统是把浙江电信CRM完全移植,采用sieble7. 可能是时代的局限性, sieble7还不支持soap消息的传递,而是使用一种特定结构的xml,通过post方式传递到外部系统. 最新的sieble8应该不会有这个问题.    然而,阅读Servicemix文档,可以发现Servicemix并没有直接的HTTP Post/Get的Binding Component. 然后自己观察就可以发现,Servicemix提供了HTTP Binding Compoent组件, 而POST/GET方式正式最基本的HTTP提交方式. 因此完全可以用HTTP Bingding Compoent支持这点. HTTP Binding Compoent    http://servicemix.apache.org/servicemix-http.html   阅读HTTP Binding Compoent的文档.并没有找到那里有设置GET/POST参数的地方, 而POST/GET传递方式,最基本的一点是必须要有一个参数作为载体,然后通过这个载体传递到服务端.   继续翻文档,翻Mail List,终于找到servicemix有个相似的例子: Http Upload    使用HTTPMarshaler完全可以解决我们的需求. Http 配置 xmlns:http="http://servicemix.apache.org/http/1.0" xmlns:novaesb="http://www.fengsage.com/novaesb" xmlns="http://www.springframework.org/sch

......

Servicemix  ESB  教程 

Apache Servicemix 教程 - CXFSE

前面我们讲了Servicemix最常用的组件之一CXFBC的使用,几乎常见的接口开发都会用到,这里我们介绍CXFSE,从名字上可以看到这是一个SE组件.属于JBI内部的数据处理单元. SE 即 Service Enging 服务引擎,JBI一个重要概念,基本概念参考此处  从官网上我们可以看到下面几个特征 JSR-181 annotations JAXB2/Aegis/XMLBeans databinding WSDL auto generation Java proxy support MTOM / attachments support 我们关心最后2个,其实这几个都属于WebService或CXF框架本身的范畴,这里因为Servicemix用到了CXF所以这些特征也带了,想获得详细特性的请访问CXF官网. 其实简单来说,CXFSE最主要的功能是用代码发布一个WSDL,但是,这个WSDL是在JBI容器内的,不对外的,因为CXFSE是一个SE组件而非BC组件,根据JBI规范,不能用于协议转换. CXFBC+CXFSE 可以做到在Servicemix容器内发布自己的Webservice. 虽然这种做法比较少见,因为Servicemix主要把现有的系统集成,而不是自己发布服务. 一、Java Proxy 官网上这句话解释的非常清楚,‘You can create java proxies for JBI endpoints, provided that they expose a WSDL.’ 要理解这句话,首先要明白一件事,即JBI内部用来描述一个服务,也是采用了WSDL规范,这不能说是JBI就是WSDL规范,只能说是JBI用了WSDL规范来描述自身的服务.因此这里我们可以很显性的把一个JBI的组件向外暴露出WSDL,通过CXF-BC直接暴露给外部.当然一般业务角度上来说,这是危险的. 二、MTOM Support CXF支持MTOM,Servicemix没理由不支持,只需按如下申明即可 <cxfse:endpoint mtomEnabled="true" ... /> 结合上面说的一对P话,我们来实际做一个例子,即Servicemix发布一个服务,该服务允许上传附件,即用到了CXFBC+CXFSE

......

Servicemix  ESB  教程  

Apache Servicemix 教程 - CXFBC

主要介绍下Servicemix最常用的组件之一servicemix cxfbc的使用,官方上有比较详细的文档,英文好的朋友可以直接点击查看   CXF 同时也是apache的一款webserivce框架.Java开发者可以使用cxf快速的发布webserivce或者作为客户端调用别的webserivce.   在Java世界里,webserivce本质上就是把java bean对象序列化成xml文本,并包装成SOAP格式的消息传递到服务端,由服务端反序列化xml消息到java bean调用相关服务. Note:这里的序列化和反序列化,涉及到2个标准,即jax-rpc和jax-ws规范 这2个规范无论是对SOAP的格式还是java-xml间互转都有着本质上的不同.JDK1.5以后,sun已经把jax-rpc移除了jdk中去. JDK1.5开始都采用jax-ws规范. 这里cxf同样只支持jax-ws规范.   我们先来写一个简单的webservice程序,充当集成的一个系统,我们称这个系统为mock系统. 如何开发一个webserivce不是这里的重点,可以点击此处下载已开发完好的webservice程序,只需把war包扔到Servlet容器内部署即可. 这里我们假设我需要集成一个订单受理系统.   浏览器内输入 http://localhost:8000/mock/services/order?wsdl   打开如下图,则启动正常 好了,我们开始对这个mock系统进行集成,因为是例子,我做的尽量简单,只使用cxfbc一个JBI组件来开发,现实环境中一般还用上xslt作为数据树结构转换,这里我们先不用. 一、编写自定义WSDL,   CXFBC是一个BC组件,简单来说其实是一个WebService的代理组件,使用这个组件我可以不写任何一行代码,来和一个现有的WebService进行连接,虽然不用写代码,但我们却需要编写一个WSDL文件,这样ESB暴露给别的系统的就是这份WSDL文件,调用后CXFBC组件会把这份WSDL产生的SOAP消息,发往外部系统,这里是我们的mock系统. 大致关系如下:    Client   -- soap &nda

......

ESB  Servicemix  教程  webservice 

Apache Servicemix 教程 - 安装部署

简单介绍下Servicemix安装、使用、部署,并简单介绍下Servicemix简单配置. 安装 下载Servicemix  http://servicemix.apache.org/download.html 由linux和windows两个不同版本 解压到指定文件夹(zip/tar.gz) Note:目前最新版本是3.3.2 和 4.0.0 运行 cd <SERVICEMIX_HOME> windows:   .\bin\servicemix.bat linux:          ./bin/servicemix Note:由于linux启动servicemix,会随终端退出而关闭,需要使用nohup命令,使其脱离终端独立运行 部署 Servicemix提供2种主要监控方式 热部署目录. 即把开发好的SA直接放到<SERVICEMIX_HOME>\hotdeploy目录中去即可 脚本部署. Servicemix运行使用ant或maven脚本方式,直接把开发好的SA植入到JBI容器内 Note:Servicemix提供了部署MBena,用户可以使用此MBean开发第三方程序进行部署 监控 Servicemix并没有提供第三方监控工具,而是推荐使用sun的jconsole工具,该工具位于JDK bin目录中和java 、javac等命令在一个目录下,操作如下 命令行输入jconsole 在远处连接处输入"service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"  默认用户名和密码都是smx 点击"连接"按钮即可对Serivicemix内部资源进行监控 Note:Servicemix的第三方生产商FUSE提供了HQ监控工具,但是由于不开源,所以大家无福消受了.   关于开发 官方推荐使用maven作为Servicemix的开发工具,个人也强烈推荐,简单方便.详细的maven教程可以参考maven官方网站.http://maven.apache.org/ 这里简单讲一下如何建立一个Service

......

ESB  Servicemix  教程  webservice 

Apache Servicemix 教程 - 介绍及理论

经过一年来ESB学习和工作的部分经验.即给自己总结的时间,把脑海中关于ESB的部分进行整理,也留下点心得,也想和对ESB感兴趣,有研究的朋友进行交流.不足之处望予以批评指正. 基础概念 1. ESB ESB(Enterprise Service Bus)是为了解决企业生态群落内大量系统间因为交互繁琐导致维护成本增加而产生的.下图是典型的传统多系统间数据交互图.随着生态群落的扩大,越来越多的系统加入,导致维护这些系统的通讯成本越来越多 ESB的诞生就是为了解决上图中的这些问题,下图可以可以看到ESB所解决的实际问题. 2. Apache Servicemix Apache是著名的开源社区,正对不同应用都有很多对应的开源产品,对开源有兴趣的朋友可以进入官网学习. 对于ESB. Apache主要有2款产品: Synapse 和 Servicemix Synapse,这款产品是apache早期的一款ESB产品,诞生于JBI规范制定之前,属于众多ESB产品中一个普通的产品,并没有什么太吸引人的地方. 但随着WSO2这款新ESB的兴起,发生了点改变.WSO2是WSO2公司正对Synapse进行二次开发后的产物,因为使用了apache licese因此也开源.并且提供了强大的可视化界面,通过几步简单的配置就能完成系统间接口的集成. ServiceMix,我们重点讲这款产品.这款产品是目前Apache主推的一款ESB产品,遵循了JBI规范,可以很方便的进行二次扩展,其自带的组件基本能完成一般系统集成的需要,是构建SOA的良好产品.目前Servicemix主要有2个版本在维护,即3.*和4.*两个版本,这里我们讲3.*版本. 3. Apache CXF 目前比较成熟功能比较齐全的webserivce工具.可以用来发布自己的webserice程序,并能作为webserivce的客户端. Servicemix使用cxf作为其webserivce的一个发布工具. 4. Apache Camel Apache Camel是一个开源的企业应用集成框架。它采用URI来描述各种组件,这样你可以很方便地与各种传输或者消息模块进行交互,比如HTTP、 ActiveMQ、JMS、JBI、SCA、MINA或CXF Bus API。该路由完全参照了《Enterprise Integration

......

ESB  Servicemix  教程  webservice 

Apache Servicemix 简单示例

一个简单的场景,做下笔记: 典型的In-Out接口: cxf-bc(consumer) --> eip "Static Routing Slip" --> saxon --> cxf-bc(provider) CXF配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0" xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance" xmlns:novaesb="http://www.hongcheng.com/novaesb/selectnumber" xmlns:clarity="http://webservices/clarity/api/numbermanagement" xsi:schemaLocation="http://servicemix.apache.org/cxfbc/1.0 http://servicemix.apache.org/schema/servicemix-cxf-bc-3.2.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">      <bean id="propertyConfigurer"         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">     <property name="location">         <value>clas

......

ESB  Servicemix  EIP  SOA 

ESB同步,异步选择,从项目实际出发(电信)

稍微总结下了目前项目中CRM通过ESB与其他系统交互时关于同步异步选择的问题。 同步和异步都是接口交互的一种模式,也可以理解成数据交互的方式。   同步:CRM通过ESB与外部系统直接连接保持不断,直至外部系统返回接口或状态此连接方结束。已知同步接口:查号、选号、选址、锁号...             返回结果在同一接口返回 优点:实时性强。速度块。容错性强。   缺点:高峰时易造成网络堵塞。或当外部系统故障时因无法返回结果而导致业务不能持续。     异步:CRM只和ESB实时交互,即CRM数据送达ESB后就返回,CRM继续完成后续操作。ESB会把数据在空闲的时间(网络空闲)发送给其他系统。已知异步接口:创建客账户、订单送OSS...                                返回结果需一个新接口返回 优点:合理应用网络资源不易对外部系统造成堵塞现象。外部系统故障时,数据仍旧保留在ESB中,直到系统恢复。 缺点:实时性查。速度较慢。容错性差(外部系统故障时CRM不会感知)。如果需要返回接口需另外提供新接口。     特别选择同步还是异步请各位从生产环境考虑,在对业务影响不大的情况下建议采用异步的方式。如有疑问与我交流。  

......

ESB  Servicemix