基于jboss的esb实现 中间件大作业
- 格式:doc
- 大小:115.50 KB
- 文档页数:9
基于JBossESB的实现面向服务架构【摘要】该文就首先探讨了面向服务的架构,研究了作为面向服务架构基础设施的企业服务总线,然后探讨了借助于开源ESB产品构建面向服务的体系架构应用的具体方法。
【关键词】SOA;ESB;JBossESB在企业应用领域通过采用面向服务体系架构统一规划、统一标准、统一平台和统一管理,不仅可以制定科学合理的整体规划,制定可持续性的发展目标;而且能有效解决企业建设中因缺乏统一架构而带来的“信息孤岛”等问题,保障企业的发展能够稳步推进。
1.面向服务的体系架构1.1面向服务的概念简单来说SOA就是一个IT策略,它将企业应用中的分散功能改造成具有互操作性的标准服务,机构可以快速组合和重用这些服务,以满足业务需要。
没有SOA,软件包是被编写为独立的软件,即在一个完整的软件包中将许多应用程序功能整合在一起。
在这种情况下更改一部分代码将对使用该代码的代码具有重大影响,这会造成系统的复杂性,并增加维护系统的成本。
而且还使重新使用应用程序功能变得较困难,因为这些功能不是为了重新使用而打的包。
SOA采用服务来组装应用,旨在将单个应用程序功能彼此分开,以便这些功能可以重用为服务或"组件"。
服务之间通过定义良好的接口和契约联系起来;接口定义采用中立的方式,独立于实现服务的硬件平台、操作系统和编程语言,使得这些服务可以使用统一和标准的方式进行通信。
服务由服务提供者通过服务代理机构提供符合契约的服务给服务消费者来实现松耦合的应用。
这些服务可以用于在企业内部创建各种其他的应用程序,或者如有需要,对外向合作伙伴公开,以便用于合作伙伴的应用程序。
从相关技术的角度,SOA的发展应该可以分为两个阶段,第一阶段是采用Web服务来实现SOA,这个时期的SOA 架构基本上是通过Web服务这种标准方式来实现的,但是这种方式没有在本质上改变软件实现的方式,只是通过这种方式将系统后天培养为SOA架构。
esb 实现方式摘要:一、引言二、ESB概念介绍三、ESB的实现方式1.基于客户端/服务器模型的实现方式2.基于Web服务的实现方式3.基于企业服务总线(ESB)的实现方式四、ESB实现方式的优缺点分析五、总结正文:一、引言随着企业信息化的不断发展,企业内部系统之间的集成变得越来越重要。
企业服务总线(Enterprise Service Bus,简称ESB)是一种用于实现企业内部系统集成的技术架构。
本文将介绍ESB的实现方式,并分析各种实现方式的优缺点。
二、ESB概念介绍ESB是一种中间件技术,它位于企业应用系统的顶层,负责在不同系统之间进行数据传输、协议转换、服务编排和监控等。
通过使用ESB,企业可以更轻松地实现系统集成,提高业务流程的灵活性和可扩展性。
三、ESB的实现方式1.基于客户端/服务器模型的实现方式在这种方式中,客户端直接与服务器进行通信,ESB扮演服务请求者和响应者之间的中介角色。
这种方式实现简单,但随着系统数量的增加,管理和维护成本会显著提高。
2.基于Web服务的实现方式在这种方式中,ESB通过Web服务协议(如SOAP、XML等)实现不同系统之间的通信。
这种方式具有较好的可扩展性和互操作性,但可能导致性能下降,且对网络带宽有一定的要求。
3.基于企业服务总线(ESB)的实现方式这是最常用的ESB实现方式。
ESB作为一个独立的中间件平台,可以实现多种协议之间的转换,提供服务路由、负载均衡、安全认证等功能。
这种方式具有较高的灵活性和可扩展性,但实施和维护成本也相对较高。
四、ESB实现方式的优缺点分析基于客户端/服务器模型的实现方式优点是简单易用,缺点是管理和维护成本高;基于Web服务的实现方式优点是具有较好的可扩展性和互操作性,缺点是可能导致性能下降,对网络带宽有要求;基于企业服务总线(ESB)的实现方式优点是具有较高的灵活性和可扩展性,缺点是实施和维护成本较高。
五、总结总之,企业在选择ESB实现方式时,需要根据自身的业务需求、技术能力和成本预算等因素进行综合考虑。
ESB汇总所谓的企业服务总线是一新兴的整合技术,主要于企业应用软件间扮演数据配送的角色,整合商业应用软件,目标为降低企业共享数据的成本。
在开源ESB家族中涌现出很多优秀的开源ESB,如:Jboss ESB, Mule ESB开源ESB在技术,技术产品的专业化程度等方面与商业ESB有很大差别.因此,企业需要综合各种现实因素做出权衡,在开源的范围内选择一款最能适合企业SOA部署需求的ESB产品,尽可能地最大化SOA所产生的业务价值.1.1JBOSS ESBJboss Esb是JBOSS推出的ESB的实现.也是JBOSS的SOA产品的基础.它基于RosettaNet ESB,支持服务的创建、部署和整合。
从架构上而言,可以将Jboss ESB中的一切都看作是服务。
这些服务并非Web Services,而是ESB服务,这些ESB服务可以通过多种传输暴露出来。
所有的ESB服务都有一个方法(doWork),可以通过下面的接口(由所有的服务共享)描述:在JBossESB中,ESB消息和SOAP消息类似,都由几个部分组成,包括标头(header),消息体(body),错误(fault),附件(attachments),等等。
每个部分包括一个可序列化的java对象集合(map),通过集合中定义的name进行访问。
这就意味着JBossESB消息并不是强类型的,在访问消息时需要注意(类型转换)。
JBOSS ESB建立在三个核心的体系结构组件上:(1)消息监听器和消息过滤器代码。
消息监听器监听消息并路由,然后引导消息到到管道。
消息过滤器则过滤消息,并将消息路由到另一个消息端点。
(2)一个基于路由服务的目录。
(3)一个消息存储库,用来存储在ESB 上交换的消息/事件。
图1 JBoss ESB ServiceJBossESB在功能上是较为强大,较之其它服务总线,它的技术架构方案是最独立的。
它除了支持J2EE标准、Web Service外,还支持多种的远程调用协议,例如JMS。
关于JBOSSESB的部署问题刚刚接触JBOSS ESB 4.5, 按照自带的helloworld Sample,新建NewESB工程, 并在在jboss-esb.xml文件配置ESB消息:...<providers><jms-provider connection-factory="ConnectionFactory" name="JBossMQ"><jms-bus busid="GwChannel"><jms-message-filter dest-name="queue/helloworld_gateway" dest-type="QUEUE"/> </jms-bus><jms-bus busid="EsbChannel"><jms-message-filter dest-name="queue/helloworld_esb" dest-type="QUEUE"/></jms-bus></jms-provider></providers>....在deployment.xml中:<jbossesb-deployment><depends>jboss.esb.quickstart.destination:service=Queue, name=helloworld_esb</depends><depends>jboss.esb.quickstart.destination:service=Queue, name=helloworld_gateway</depends></jbossesb-deployment>在jbmq-queue-service.xml中写:<server><mbean code="org.jboss.mq.server.jmx.Queue"name="jboss.esb.quickstart.destination:service=Queue,name=h elloworld_esb"><depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager</depends></mbean><mbean code="org.jboss.mq.server.jmx.Queue"name="jboss.esb.quickstart.destination:service=Queue,nam e=helloworld_gateway"><depends optional-attribute-name="DestinationManager"> jboss.mq:service=DestinationManager</depends></mbean></server>用JBOSS TOOLS 3.0部署NewESB时出现以下问题:05:33:40,937 INFO [JBoss4ESBDeployer] create esb service, NewESB.esb05:33:40,978 ERROR [URLDeploymentScanner] Incomplete Deployment listing:--- MBeans waiting for other MBeans ---ObjectName: jboss.esb:deployment=NewESB.esbState: NOTYETINSTALLEDI Depend On:jboss.esb:deployment=jbossesb.esbjboss.esb.quickstart.destination:service=Queue,name=hello world_esbjboss.esb.quickstart.destination:service=Queue,name=hello world_gateway--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---ObjectName:jboss.esb.quickstart.destination:service=Queue,name=helloworl d_esbState: NOTYETINSTALLEDDepends On Me:jboss.esb:deployment=NewESB.esb到底是什么问题,是不是服务器上哪里没有配置?请大家帮忙(JBoss ESB已安装成功,可以用Ant运行Sample)bennyparlo发表于 2010-5-20 09:39因为jbossesb-server-4.5.GA已经默认将jboss-4.2.3.GA中自带的mq替换成jboss-messaging,所以相应的queue定义也需要改换,如:<mbeancode="org.jboss.jms.server.destination.QueueService"name="jboss.messaging.destination:service=Queue,name= distribution_request_gateway"xmbean-dd="xmdesc/Queue-xmbean.xml"><depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer </depends><depends>jboss.messaging:service=PostOffice</depends> </mbean>。
中间件大作业ESB简单实例实现姓名:侯继豪学号:201092467班级:英强1014一、ESB简介ESB全称为Enterprise Service Bus,即企业服务总线。
它是传统中间件技术与XML、Web服务等技术结合的产物。
ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。
ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。
从功能上看,ESB 提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。
二、ESB的基本原理及功能ESB在统一的分布式架构中结合SOA、WebServices和XML等技术,并利用基于标准的整合技术,整合容易部署和方便管理的基础设施。
遗留系统中的应用和新开发的应用服务都可以通过定义好的服务接口完成集成。
同时,通过独立的!松散藕合的服务接口的集成,ESB还为服务交互的双方充当了中介,将企业内或合作的企业之间的已有服务和新应用的服务连接起来,同时还负责对服务组合的应用和业务流程的管理。
ESB的主要功能有:1)服务的MetaData管理:在总线范畴内对服务的注册命名及寻址进行管理。
2)传输服务:确保通过企业总线互连的业务流程间的消息的正确交付,还包括基于内容的路由功能。
3)中介:提供位置透明的路由和定位服务;提供多种消息传递形式;支持广泛使用的传输协议。
4)多服务集成方式:如JCA,Web服务,Messaging ,Adaptor 等。
5)服务和事件管理支持:调用服务的记录、测量和监控数据;提供事件检测、触发和分布功能;三、JBoss简介JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器。
因为JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用它,而不用支付费用。
2006年,Jboss公司被Redhat 公司收购。
JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。
但JBoss核心服务不包括支持servlet/JSP 的WEB容器,一般与Tomcat或Jetty绑定使用。
四、ESB的简单实例1.搭建JAVA运行环境。
安装jdk2.配置环境变量设置JBOSS_HOME 为jboss-5.1.0.GA根目录;ANT_HOME为apache-ant-1.7.1根目录;JBOSSESB_HOME环境变量为jbossesb-4.7根目录;在PATH加入%ANT_HOME%\bin。
3.配置jbossesb-4.7jbossesb-4.7\install下找到deployment.properties-example,把该文件改名为deployment.properties然后把里面把org.jboss.esb.tomcat.home修改为org.jboss.esb.server.home并指向bossesb-4.7的根目录。
配置结果如图:3.关联JBossESB与JBoss在命令行界面进入jbossesb-4.7\install。
执行ant。
4.执行实例。
A.在j boss-5.1.0.GA\bin下运行run.bat,启动esb。
如最后一行,显示Started in XXX 则为启动成功。
5.实例功能说明及部分代码说明本实例演示如何存储一条消息到消息容器中。
CheckMessageStoreAction.java :package org.jboss.soa.esb.samples.quickstart.messagestore;import .URI;import org.jboss.internal.soa.esb.persistence.format.MessageStoreFactory; import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;import org.jboss.soa.esb.helpers.ConfigTree;import org.jboss.soa.esb.message.Message;import org.jboss.soa.esb.services.persistence.MessageStore;import org.jboss.soa.esb.services.persistence.MessageStoreException;public class CheckMessageStoreAction extends AbstractActionPipelineProcessor {protected ConfigTree _config;public CheckMessageStoreAction(ConfigTree config) {_config = config;}/*检查消息是否在容器中*/public Message process(Message originalMessage){return originalMessage ;}/*执行一个成功的流水线过程*/public void processSuccess(final Message originalMessage){//I can call the messagestore API directory if it is deployed in the same JVMString messageStoreClass ="org.jboss.internal.soa.esb.persistence.format.db.DBMessageStoreImpl";MessageStore messageStore =MessageStoreFactory.getInstance().getMessageStore(messageStoreClass);//Try to pull the message outtry{Message message = messageStore.getMessage((URI) originalMessage.getProperties().getProperty(MessageStore.MESSAGE_URI));//Print out the content of the messageSystem.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");System.out.println("Body (from the stored message): " + message.getBody().get()) ;System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");}catch (final MessageStoreException mse){System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");System.out.println("Error from message store: " +mse.getMessage()) ;System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");}}}jboss-esb.xml :<?xml version = "1.0" encoding = "UTF-8"?><jbossesbxmlns="/labs/jbossesb/trunk/product/etc/schema s/xml/jbossesb-1.0.1.xsd"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/labs/jbossesb/trunk/produ ct/etc/schemas/xml/jbossesb-1.0.1.xsd/repos/labs/labs/jbossesb/trunk/product/etc/schemas /xml/jbossesb-1.0.1.xsd"parameterReloadSecs="5"><providers><jms-provider name="JBossMQ"connection-factory="ConnectionFactory"><jms-bus busid="quickstartGwChannel"><jms-message-filterdest-type="QUEUE"dest-name="queue/quickstart_messagestore_Request_gw" /></jms-bus><jms-bus busid="quickstartEsbChannel"><jms-message-filterdest-type="QUEUE"dest-name="queue/quickstart_messagestore_Request_esb"/></jms-bus></jms-provider></providers><services><servicecategory="FirstServiceESB"name="MessageStoreListener"description="Hello World, and write message to message store"> <listeners><jms-listener name="JMS-Gateway"busidref="quickstartGwChannel"is-gateway="true"/><jms-listener name="helloWorld"busidref="quickstartEsbChannel"/></listeners><actions mep="OneWay"><!-- Print the message to the console --><action name="notificationAction"class="org.jboss.soa.esb.actions.Notifier"><property name="okMethod" value="notifyOK" /><property name="notification-details"><NotificationList type="OK"><target class="NotifyConsole" /></NotificationList></property></action><action name="testStore"class="org.jboss.soa.esb.actions.TestMessageStore"><property name="logSuccess" value="true"/></action><!-- Check that the message is really there (executes on success of pipeline) --><action name="CheckMessageStore"class="org.jboss.soa.esb.samples.quickstart.messagestore.CheckMessageStoreA ction" /><!-- Add a copy of the message to the message store under categorization 'test' --><action name="PersistAction"class="org.jboss.soa.esb.actions.MessagePersister" ><property name="classification" value="test"/><property name="message-store-class"value="org.jboss.internal.soa.esb.persistence.format.db.DBMessageStoreImpl" /></action></actions></service></services></jbossesb>。