读书人

OSGi器皿中Bundle之间Asynchronous Co

发布时间: 2012-11-11 10:07:57 作者: rapoo

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.xsdhttp://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.xsdhttp://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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsdhttp://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsdhttp://www.springframework.org/schema/osgi-compendiumhttp://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsdhttp://camel.apache.org/schema/springhttp://camel.apache.org/schema/spring/camel-spring.xsdhttp://www.springframework.org/schema/osgihttp://www.springframework.org/schema/osgi/spring-osgi.xsd"><bean id="activemq" value="tcp://localhost:61610" /></bean><camelContext xmlns="http://camel.apache.org/schema/spring"><route><from uri="timer://MyTimer?fixedRate=true&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.xsdhttp://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsdhttp://camel.apache.org/schema/spring http://camel.apache.org/camel/schema/spring/camel-spring.xsdhttp://camel.apache.org/schema/osgi http://camel.apache.org/schema/osgi/camel-osgi.xsd"><bean id="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.xsdhttp://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsdhttp://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsdhttp://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&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" value="MyTransform" /></bean></beans>? 

读书人网 >操作系统

热点推荐