`

OSGi容器中Bundle之间Asynchronous Communication

 
阅读更多

     Fuse ESB Enterprise Container中Application之间Asynchronous Communication有两种方式:ActiveMQ和

     NMR    Channel.

1. JMS Broker

     Fuse ESB Enterprise支持通过activemq feature部署JMS Broker, 在安装这个Feature之后,部署JMS Broker

     只需要将 broker配置文件Copy至热部署目录下。

    (1) The Default Broker

    Fuse ESB Enterprise启动时安装一个默认的Broker Instance,监听的端口是:61616,配置文件位于:

    etc/activemq-broker.xml,通过下面的命令查看安装ActiveMQ Broker:

    features:list  | grep activemq

    osgi:list | grep activemq

    Broker默认的数据目录:/data/activemq/default

    (2) Hot Deploymnet

    Copy ActiveMQ的配置文件至deploy目录,Fuse ESB Enterprise将自动创建一个数据目录位于:

    InstallDir/activemq-data/BrokerName

    ActiveMQ的配置文件有两中方式:

    A. Spring configuration file

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
						http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.0.xsd">

	<broker xmlns="http://activemq.apache.org/schema/core"
		brokerName="simple-spring">
		<transportConnectors>
			<transportConnector name="openwire" uri="tcp://localhost:61000" />
		</transportConnectors>
	</broker>

</beans>

     B. Blueprint configuration file

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.4.0.xsd
						http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

	<broker xmlns="http://activemq.apache.org/schema/core" brokerName="simple-blueprint">
		<transportConnectors>
			<transportConnector name="openwire" uri="tcp://localhost:61001" />
		</transportConnectors>
	</broker>

</blueprint>

     (3) Manage Brokers from the Console

     activemq:query, activemq:list

     (4) JMS Endpoints in a Router Application:test-timer.xml

<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:util="http://www.springframework.org/schema/util" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:camel="http://camel.apache.org/schema/spring" 
	xmlns:osgi="http://www.springframework.org/schema/osgi"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/util
						http://www.springframework.org/schema/util/spring-util.xsd
						http://www.springframework.org/schema/osgi
						http://www.springframework.org/schema/osgi/spring-osgi.xsd
						http://www.springframework.org/schema/osgi-compendium
						http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
						http://camel.apache.org/schema/spring
						http://camel.apache.org/schema/spring/camel-spring.xsd
						http://www.springframework.org/schema/osgi
						http://www.springframework.org/schema/osgi/spring-osgi.xsd">

	<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
		<property name="brokerURL" value="tcp://localhost:61610" />
	</bean>

	<camelContext xmlns="http://camel.apache.org/schema/spring">
		<route>
			<from uri="timer://MyTimer?fixedRate=true&amp;period=4000" />
			<setBody>
				<constant>Hello World!</constant>
			</setBody>
			<to uri="activemq:camel.timer" />
		</route>
		<route>
			<from uri="activemq:camel.timer" />
			<to uri="file:/home/fdc/temp/sandpit/timer" />
		</route>
	</camelContext>
</beans>

     运行上述Broker步骤:

     A. 确保Feature activemq-camel已安装:features:install camel-activemq

     B. 确保activemq-broker Feature没安装:features:uninstall activemq-broker

     C. Copy 上述test-timer.xml文件至deploy目录.

2. Inter-Bundle Communication with the NMR

     (1)  Fuse ESB Enterpris提供了一个非标准的asynchronous messaging,为:Normalized Message Router

     (NMR),是JBI标准中定义的;NMR可用于在OSGi Container和JBI Container中进行asynchronous

     communication.

     A. Normalized messages in the JBI container

     JBI 标准定义了normalized message,是基于WSDL1.1和2.0的,一个完整的normalized message有下面的

     spect:

     Contet: 严格的XML格式

     Attachments:如果发送的是二进制的Content,可以添加附件;

     Properties: 键值对;

     Security Subject: 验证发送者。

     B. Normalized messages in the OSGi container

     Contet: 可以是任何的格式

     Attachments:可发送的二进制的附件;

     Properties: 键值对;

     Security Subject: 验证发送者。

     (2) The Apache Camel NMR Component

     The Apache Camel NMR Component是NMR的一个适配器,使Camle Application发送消息给OSGi Container

     中的Bundle或 JBI Container 中的Component。

     安装NMR Feature: features:install nmr

     实例化NMR Component: 在Bundle的Spring 配置文件中定义下面的Bean,并需要Import-Package:

     org.apache.servicemix.camel.nmr, org.apache.servicemix.nmr.api

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:osgi="http://www.springframework.org/schema/osgi"
	xmlns:camel-osgi="http://camel.apache.org/schema/osgi"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
						http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
						http://camel.apache.org/schema/spring http://camel.apache.org/camel/schema/spring/camel-spring.xsd
						http://camel.apache.org/schema/osgi http://camel.apache.org/schema/osgi/camel-osgi.xsd">

	<bean id="nmr" class="org.apache.servicemix.camel.nmr.ServiceMixComponent">
		<property name="nmr">
			<osgi:reference interface="org.apache.servicemix.nmr.api.NMR" />
		</property>
	</bean>

</beans>

     Spring XML Defining a Route with an NMR Endpoint:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:osgi="http://www.springframework.org/schema/osgi"
	xmlns:camel-osgi="http://camel.apache.org/schema/osgi"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
						http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
						http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
						http://camel.apache.org/schema/osgi http://camel.apache.org/schema/osgi/camel-osgi.xsd">

	<import resource="classpath:org/apache/servicemix/camel/nmr/camel-nmr.xml" />

	<camel-osgi:camelContext xmlns="http://camel.apache.org/schema/spring">
		<!-- Route periodically sent events into the NMR -->
		<route>
			<from uri="timer://myTimer?fixedRate=true&amp;period=2000" />
			<to uri="nmr:ExampleRouter" />
		</route>
		<!-- Route exchange from the NMR endpoint to a log endpoint -->
		<route>
			<from uri="nmr:ExampleRouter" />
			<bean ref="myTransform" method="transform" />
			<to uri="log:ExampleRouter" />
		</route>
	</camel-osgi:camelContext>

	<bean id="myTransform" class="org.apache.servicemix.examples.camel.MyTransform">
		<property name="prefix" value="MyTransform" />
	</bean>

</beans>  
分享到:
评论
1 楼 a175335 2013-06-09  
楼主,关于nmr,有没有实际用过?你的例子是官方文档的例子啊,
有没有<from uri="nmr:a"><to uri="nmr:b"><to uri="nmr:c">类似的用法??

相关推荐

    tomcat嵌入OSGI容器

    标题中的“tomcat嵌入OSGI容器”是指在Apache Tomcat服务器中集成OSGI(Open Service Gateway Initiative)框架,使得Tomcat能够支持模块化的应用程序部署和管理。OSGI是一种Java平台上的服务导向架构,它允许动态地...

    osgi多个bundle读取同一配置文件

    osgi多个bundle之间读取同一配置文件,需要单独添加一个用来读取配置文件的bundle

    WEB容器托管OSGi容器(轻量级集成方式)

    示例源码工程可能包含了如何在实际项目中实现这一轻量级集成的代码示例,包括如何配置Web容器以托管OSGi容器,如何编写和打包OSGi Bundle,以及如何在Web应用中使用OSGi服务等。 通过阅读和理解这个源码工程,...

    osgi在web容器中部署的例子

    3. 将OSGi bundle部署到容器:将`com.sample.web_1.0.0.jar`和`com.sample.web.zip`中的bundle导入到OSGi容器中,这通常通过容器的管理界面或命令行工具完成。 4. 部署Web应用:如果`bridge.war`是一个Web应用,...

    osgi 在web容器中部署

    在Web容器中部署OSGi应用,特别是像Tomcat这样的流行Servlet容器,可以提高应用的灵活性、可维护性和可扩展性。本文将详细介绍如何使用桥接技术(如Apache Felix的WebConsole或Pax Web)在Tomcat中部署OSGi程序。 ...

    OSGI bundle

    这通常涉及到设置IDEA的项目结构、添加Felix框架的依赖、配置运行配置等操作,使得开发者可以在IDEA中调试和测试OSGI bundle。 **总结** OSGI bundle提供了一种模块化的软件开发方式,使得Java应用程序可以按需...

    浅析OSGI的bundle依赖

    在OSGI环境中,每个bundle都是一个独立的代码单元,具有自己的类路径,并且可以有自己的依赖关系。这篇博客“浅析OSGI的bundle依赖”可能探讨了如何管理和解决这些模块间的依赖问题。 首先,我们来看一下OSGI中的...

    OSGI应用中整合Spring、Mybatis、Spring MVC案例

    3. 配置Pax Web或类似的Servlet容器,以支持OSGI bundle中的Spring MVC应用。 4. 在Spring MVC中定义Controller,这些Controller作为OSGI服务运行。 5. 调整Web应用的部署描述符(如web.xml),确保它与OSGI环境兼容...

    OSGi with CAR-Bundle

    3. **Bundle作为组件**:每个Bundle可以被视为独立的组件,它们之间通过OSGi服务注册表进行交互,实现动态的依赖管理和服务发现。 4. **使用脚本管理组件**:引入脚本语言,如JavaScript或Groovy,可以更灵活地管理...

    osgi发布http服务的各种bundle,各种jar包,全全全~

    osgi发布http服务的各种bundle,各种jar包,全全全~非常好用的技术包 包括:org.eclipse.equinox.http_1.0.0.v20060601a.jar org.eclipse.equinox.ds_1.0.0.v20060601a.jar org.eclipse.equinox.servlet.api_1.0.0...

    OSGi与Web容器的整合

    这是通过像Equinox的Servlet Bridge这样的技术实现的,它充当了一个桥梁,让OSGi Bundle可以在传统的Web容器中运行。但是,这种方法并不理想,因为它通常较为复杂,而且Web项目本身并没有模块化为OSGi Bundle,因此...

    基于EQUINOX的 OSGI BUNDLE 运行例子

    标题"基于EQUINOX的OSGI BUNDLE运行例子"指的是一个实际操作示例,展示了如何在EQUINOX OSGi环境中运行OSGi Bundle。EQUINOX提供了一个完整的运行时环境,使得开发者可以方便地管理和执行这些模块化的Bundle。 描述...

    Spring OSGI 快速入门中文教程

    - **容器管理**:Spring OSGi容器负责Bundle的生命周期管理和服务发现。 - **依赖注入**:Spring的DI特性与OSGi服务相结合,简化了模块间的依赖管理。 - **热部署**:在运行时可以更新Bundle,无需重启系统。 - **...

    OSGI bundle change listener

    总结来说,`OSGI bundle change listener`是OSGi框架中用于监控bundle状态变化的关键机制,它允许开发者对bundle的生命周期进行精细控制,实现动态的服务注册、依赖管理和系统自适应配置。结合像VisualVM这样的工具...

    OSGI进阶插件开发

    3. **系统测试**:在实际OSGi容器中运行所有bundle,验证整个系统的功能和稳定性。 五、OSGi实践 1. **插件系统**:利用OSGi创建可扩展的应用程序框架,如Eclipse IDE就是基于OSGi的插件系统。 2. **分布式系统**...

    osgi基础demo-搭建servlet

    6. **部署Bundle**:将Servlet Bundle安装到OSGi容器中。这可以通过容器的命令行接口、图形用户界面或API完成。 7. **启动和访问Servlet**:启动Servlet Bundle后,可以通过HTTP服务暴露Servlet,以便通过HTTP请求...

    基于Eclipse的Equinox框架开发OSGi Bundle应用

    **示例应用**:压缩包中的"osgi_example"可能包含了一个简单的OSGi Bundle示例,例如,创建一个HelloWorld服务,其他Bundle可以注册和使用这个服务。 总结来说,基于Eclipse的Equinox框架开发OSGi Bundle应用,可以...

    基于OSGi的 webbundle

    启动一个Web Bundle时,OSGi容器会解析MANIFEST.MF中的信息,并将Web应用部署到Jetty服务器上。停止时,Web应用从服务器上卸载,但Bundle本身仍保留在系统中。 **Web Bundle的优势** 1. **动态性**:Web Bundle...

    osgi 资料 总结 实践

    Spring DM允许在OSGi容器中管理Spring应用的bean和服务。 - **与Hibernate的集成**:在OSGi环境中使用Hibernate,需要处理类加载和依赖的问题。可以通过使用特定的OSGi友好的Hibernate版本或适配器,如Hibernate ...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...

Global site tag (gtag.js) - Google Analytics