ServiceMix学习笔记最终版.docx
- 文档编号:11878150
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:13
- 大小:214.18KB
ServiceMix学习笔记最终版.docx
《ServiceMix学习笔记最终版.docx》由会员分享,可在线阅读,更多相关《ServiceMix学习笔记最终版.docx(13页珍藏版)》请在冰豆网上搜索。
ServiceMix学习笔记最终版
ServiceMix学习笔记
1ServiceMix安装即入门(参考appacheServiceMix官网)
首先在http:
//servicemix.apache.org/download.html下载ServiceMix的压缩包,解压后即可。
安装完ServiceMix后,切换到其跟目录下的bin文件夹内,点击ServiceMix.bat即可运行。
安装ServiceMix的插件或发布Sa部件只需将其拷贝到hotdeploy目录下,然后启动ServiceMix即可。
2ServiceMix的几个重要概念(参考网上资料)
ServiceMix实现了JBI标准,下面是对JBI标准的简要描述。
JBI:
JBI是java的标准,它通过使用可插入式的组件来构建集成系统,这些可插入式的组件通过NM来相互传送消息。
消息交换的模式是基于网络服务脚本语言(WSDL)的。
图1JBI可插入式框架
图1中显示了每个组件可以通过插拔式的方式添加到JBI或从JBI中删除。
图2JBI解耦
图2显示了消息在组件A和B之间的传递。
图3JBI架构
JBI组件分类:
∙服务引擎(ServiceEngines)(SE)提供业务逻辑和事务服务,并消费这些服务.
∙关联组件(BindingComponents)(BC)提供外部的服务与JBI环境的通信连接(provideconnectivitytoservicesexternaltotheJBIenvironment).
服务引擎(Serviceengines)和关联组件(bindingcomponents)可以充当服务提供者又可以充当消费者或者二者兼具。
ServiceMix实现了JBI标准,它运行的基本原理是:
Servicemix使用consumer接受到客户request,在Servicemix的服务列表中寻找服务,并且发布一个EndPoint,然后再provider中发布一个指向目标service的服务。
ServiceUnit(SU):
服务单元。
ServiceAssembly(SA服务装配组件):
是SU单元的集合。
在servicemix上发布一项服务,其实是发布一个服务集(SA),在这个集合中,可能存在一个或者多个服务(SU)。
例如用户有一个请求需要顺序使用两个webservice,这样我们可以定义两个SU分别对应不同的webservice,然后使用一个SA将这两个SU统合起来这样,我们就可以调用一个暴露在外面的SA服务,来达到使用两个webservice的目的。
也就是说在整个过程种Servicemix充当一个Proxy,即将一个外部的WebService发布到ServiceMix服务当中。
使得客户可以通过调用暴露在外面的Servicemix的服务端口来调用实际上在其他服务器上的WebService。
3创建Maven项目(参考Maven权威指南)
3.1Maven的作用
Maven是一个项目管理工具,它包含了一个项目对象模型(ProjectObjectModel),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(DependencyManagementSystem),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
3.2Maven的核心概念
Maven插件和目标(PluginsandGoals):
插件指的是完成一项工作所需要的工具,而目标即是需要完成的工作。
例如:
在appache例子中有一个:
mvnarchetype:
create-DarchetypeArtifactId=servicemix-service-unitDarchetypeGroupId=org.apache.servicemix.tooling-DartifactId=tutorial-file-su这个命令,其中的archtype就是插件,而create就是要完成的目标。
Maven生命周期(Lifecycle):
完成一个目标,可能会有多个阶段组成,而这各个阶段就生命周期的不同阶段,所有这些生命周期阶段就组成了整个生命周期,例如在create过程中,就可能包含又编译、链接等等阶段。
Maven坐标(Coordinates):
Archetype插件通过名字为pom.xml(项目对象模型(POM),一个项目的声明性描述。
)的文件创建了一个项目。
在pom.xml中有groupId,artifactId,version和packaging,他们一起组成了Maven坐标,maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者MavenPOM里的一个插件。
也就是说我们在创建项目、插件等时,需保证它的唯一性。
Maven仓库:
一个Maven仓库是项目构件的一个集合,这些构件存储在一个目录结构下面,它们的格式能很容易的被Maven所理解。
在一个Maven仓库中,所有的东西存储在一个与Maven项目坐标十分匹配的目录结构中。
当第一次构建项目时,如果发现所需要的依赖项在仓库里面没有,则会从远处下载。
Maven依赖管理(DependencyManagement):
一个项目可能会依赖于其它项目,而这些依赖项我们在maven中只需要添加其直接依赖项,对于间接依赖项maven会为我们去查找处理。
(可以通过mvnsite来生成项目的文档和报告)
3.3创建Maven项目(参考AppacheserviceMix中的例子)
(A)、创建一个新的目录,在目录中创建pom.xml文件,在文件内输入下面的代码:
xmlversion="1.0"encoding="utf-8"?
>
//maven.apache.org/POM/4.0.0" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //maven.apache.org/POM/4.0.0http: //maven.apache.org/maven-v4_0_0.xsd"> //servicemix.org 上面标示红色的部分即为maven项目的坐标。 (B)、打开控制台,切换到该目录下,输入mvnarchetype: create-DarchetypeArtifactId=servicemix-service-unit-DarchetypeGroupId=org.apache.servicemix.tooling-DartifactId=tutorial-file-su 就可以创建一个(SU)。 (C)、这时候你可以对产生的tutorial-file-su目录下的pom.xml文件进行定制(修改项目名字等),定制完成之后,切换到顶级目录,输入 mvnarchetype: create-DarchetypeArtifactId=servicemix-service-assembly-DarchetypeGroupId=org.apache.servicemix.tooling-DartifactId=tutorial-sa (D)、这时会生成tutorial-sa目录,在该目录下生成的pom.xml文件中添加我们所要增加的su服务,也可以对其进行适当定制,完成之后切换到顶级目录。 输入mvninstall即完成整个sa的生成。 4Camel的使用(参考Camel手册) 4.1Camel的作用 对camel的英文介绍: ApacheCamelisapowerfulopensourceintegrationframeworkbasedonknownEnterpriseIntegrationPatternswithpowerfulBeanIntegration.CamelletsyoucreatetheEnterpriseIntegrationPatternstoimplementroutingandmediationrulesineitheraJavabasedDomainSpecificLanguage(orFluentAPI),viaSpringbasedXmlConfigurationfilesorviatheScalaDSL.ThismeansyougetsmartcompletionofroutingrulesinyourIDEwhetherinyourJava,ScalaorXMLeditor.ApacheCamelusesURIssothatitcaneasilyworkdirectlywithanykindofTransportormessagingmodelsuchasHTTP,ActiveMQ,JMS,JBI,SCA,MINAorCXFBusAPItogetherwithworkingwithpluggableDataFormatoptions.ApacheCamelisasmalllibrarywhichhasminimaldependenciesforeasyembeddinginanyJavaapplication.ApacheCamelletsyouworkwiththesameAPIregardlesswhichkindofTransportused,solearntheAPIonceandyouwillbeabletointeractwithalltheComponentsthatisprovidedout-of-the-box.ApacheCamelhaspowerfulBeanBindingandintegratedseamlesswithpopularframeworkssuchasSpringandGuice.ApacheCamelhasextensiveTestingsupportallowingyoutoeasilyunittestyourroutes.ApacheCamelcanbeusedasaroutingandmediationengineforthefollowingprojects: •ApacheServiceMixwhichisthemostpopularandpowerfuldistributedopensource ESBandJBIcontainer •ApacheActiveMQwhichisthemostpopularandpowerfulopensourcemessage broker •ApacheCXFwhichisasmartwebservicessuite(JAX-WS) •ApacheMINAanetworkingframework 大概意思是说,camel可以采用JAVADSL或者XML或者ScalaDSL来实现消息路由,使得消息能够按照预设路径一步一步的由producter到consumer。 Camel通过使用URI可以支持类似sHTTP,ActiveMQ,JMS,JBI,SCA,MINAorCXFBusAPI提供的数据格式。 并且Camel可以与流行的框架spring进行集成,支持单元测试。 4.2Camel的使用 (A)、创建CamelContext对象: CamelContextcontext=newDefaultCamelContext(); (B)、设置消息路由,有一下几种方式: (a)、直接将RouteBuilder类的实例加入,例如: context.addRoutes(newRouteBuilder(){ publicvoidconfigure(){ from("test-jms: queue: test.queue").to("file: //test");//setupalisteneronthefilecomponent from("file: //test").process(newProcessor(){ publicvoidprocess(Exchangee){ System.out.println("Receivedexchange: "+e.getIn()); } }); } }); (b)、将JMS组件加入,例如: ConnectionFactoryconnectionFactory=new ActiveMQConnectionFactory("vm: //localhost? broker.persistent=false");//Notewecanexplicitynamethecomponent context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory); (c)、指定ActiveMQ组件的URL地址添加,例如: camelContext.addComponent("activemq", activeMQComponent("vm: //localhost? broker.persistent=false")); (C)、创建消息(通常情况下由外部用户提供) ProducerTemplatetemplate=context.createProducerTemplate(); (D)、启动Camel camelContext.start(); (E)、向camel发送消息 for(inti=0;i<10;i++){ template.sendBody("test-jms: queue: test.queue","TestMessage: "+i); } 4.3创建camel项目(AppacheServiceMix官网) (A)、新建一个目录,在目录中添加pom.xml文件,在文件中添加如下代码: xmlversion="1.0"encoding="utf-8"? > //maven.apache.org/POM/4.0.0" xmlns: xsi="http: //www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http: //maven.apache.org/POM/4.0.0http: //maven.apache.org/maven-v4_0_0.xsd"> : Tutorial //servicemix.apache.org (B)、然后返回顶级目录,打开控制台窗口,并键入 mvnarchetype: create-DarchetypeArtifactId=servicemix-camel-service-unit -DarchetypeGroupId=org.apache.servicemix.tooling -DartifactId=tutorial-camel-su 就可以创建一个SUproject。 (C)、返回顶级目录键入: mvnarchetype: create-DarchetypeArtifactId=servicemix-service-assembly -DarchetypeGroupId=org.apache.servicemix.tooling-DartifactId=tutorial-camel-sa 创建一个SAproject,再讲对suproject的项目依赖添加到sa产生的pom.xml文件中。 (D)、将tutorial-camel-suproject文件中的camel-context.xml中的package元素内容修改为 from("timer: //tutorial? fixedRate=true&delay=3000&period=10000")//1 .setBody(constant("Helloworld! "))//2 .to("log: tutorial");//3 } (E)、切换到顶级目录,键入mvninstall创建项目,将得到的tutorial-camel-sa下的jar文件拷贝到hotdeploy目录下,启动ServiceMix完成发布。 5JMS详解(参考网上资料) 5.1JMS的作用 JMS提供了一种访问企业消息系统的方法,即面向消息的中间件(MOM)。 MOM通过中间媒介以间接方式在应用程序之间异步传送数据,提供了一种以松散耦合的灵活方式集成应用程序的机制。 JMS实现的功能就是一个存储和转发的功能。 多个应用程序可以就一个主题发布和订阅消息,而应用程序对其他人仍然是匿名的。 MOM起着代理(broker)的作用,将一个主题已发表的消息路由给该主题的所有订阅者。 JMS是一组接口和相关语义,它定义了JMS客户如何访问企业消息产品的功能。 JMS消息的通信方式有两种即: 点对点方式(point-to-point)点对点的消息发送方式主要建立在MessageQueue,Sender,reciever上,MessageQueue存贮消息,Sender发送消息,receiver接收消息.具体点就是SenderClient发送MessageQueue,而receiverCliernt从Queue中接收消息和"发送消息已接受"到Quere,确认消息接收。 消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到Queue,而不需要知道接收客户端是不是在运行;发布/订阅方式(publish/subscriberMessaging)用于多接收客户端的方式。 作为发布订阅的方式,可能存在多个接收客户端,并且接收端客户端与发送客户端存在时间上的依赖。 一个接收端只能接收他创建以后发送客户端发送的信息。 作为subscriber,在接收消息时有两种方法,destination的receive方法,和实现messagelistener接口的onMessage方法。 5.2JMS程序的创建过程 首先介绍关于JMS的几个重要接口: ConnectionFactory: 一个创建Connection的受管理对象。 Connection: 连接到提供者的活动连接。 Destination: 一个封装消息目的地的身份的受管理对象,如消息的来源地和发送地。 Session: 发送和接收消息的单线程环境。 为了简化,并且因为Session控制事务的缘故,通过多个线程进行并发访问受到了限制。 可以将多个Session用于多线程应用程序。 MessageProducer: 用于发送消息。 MessageConsumer: 用于接收消息。 一个典型的JMS程序要经过以下步骤才能开始产生和使用消息: (A)、通过JNDI(JNDI是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC,都是构建在抽象层上。 )查询ConnectionFactory。 (B)、通过JNDI查询一个或者多个Destination。 (C)、用ConnectionFactory创建一个Connection。 (D)、用Connection创建一个或者多个Session。 (E)、用Session和Destination创建所需要的MessageProducer和MessageConsumer。 (F)、启动Connection。 经过以上几个步骤后,消息就可以开始流动,应用程序可以根据需要接收、处理和发送消息。 5.3JMS示例程序 消息生产者向JMS发送消息的示例: importjava.util.*; importjavax.naming.*; importjavax.jms.*; publicclassMessageProducter{ publicstaticvoidmain(String[]args){ //JMSConnectionFactory的JNDI StringqueueConnectionFactoryName="myjmsconnectionfactory"; //JMSQueue或者JMSTopic的JNDI StringqueueName="myjmsqueue"; //transaction模式 booleantransacted=false; //acknowledgement模式 intacknowledgementMode=Session.AUTO_ACKNOWLEDGE; //需要发送的消息 Stringmessage="Messageneedtosend"; Propertiesproperties=ne
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ServiceMix 学习 笔记 最终版
![提示](https://static.bdocx.com/images/bang_tan.gif)