ServiceMix学习笔记最终版.docx

上传人:b****5 文档编号:11878150 上传时间:2023-04-08 格式:DOCX 页数:13 大小:214.18KB
下载 相关 举报
ServiceMix学习笔记最终版.docx_第1页
第1页 / 共13页
ServiceMix学习笔记最终版.docx_第2页
第2页 / 共13页
ServiceMix学习笔记最终版.docx_第3页
第3页 / 共13页
ServiceMix学习笔记最终版.docx_第4页
第4页 / 共13页
ServiceMix学习笔记最终版.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

ServiceMix学习笔记最终版.docx

《ServiceMix学习笔记最终版.docx》由会员分享,可在线阅读,更多相关《ServiceMix学习笔记最终版.docx(13页珍藏版)》请在冰豆网上搜索。

ServiceMix学习笔记最终版.docx

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

4.0.0

org.apache.servicemix.tutorial

parent

1.0-SNAPSHOT

pom

Tutorial

http:

//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">

4.0.0

org.apache.servicemix.tutorial.camel

parent

1.0-SNAPSHOT

pom

SMX-Camel:

:

Tutorial

http:

//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元素内容修改为org.apache.servicemix.tutorial.camel,然后将org.apache.servicemix.tutorial.camel.MyRouteBuilder类中的configure修改为(采用了dsl语法)publicvoidconfigure(){

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1