ESB实践(ServiceMix ):改变Hello World的消息分发策略
ServicMix支持的消息分发策略:
1。Straight-throw flow:binding component -> NMR Broker -> service component
2。Seda Flow:binding component ->缓存 -> NMR Broker -> 缓存 -> service component
3。Cluster Flow:binding component ->缓存 -> NMR Broker1 -> NMR Broker2 -> 缓存 -> service component(来源www.iocblog.net)
改变消息发送的方式可以通过改变servicemix.xml中<sm:container>的flowName属性来达到目的,它的值是:seda、st、cluster之一。对于hello world,只需改变这个值即可。如果要将Hello World改造为集群,还需要改变<sm:container>的name。(注:使用servicemix 2.0.2)
1。拆分Hello World的目录为2个目录:mytest1和mytest2。每个目录中结构:
mytest1
\my\components\MsgProvider.class
\my\components\MsgProvider$1.class 《==注:这是MsgProvider中的匿名类编译后自动生成。
\servicemix.xml
mytest2
\my\components\MsgConsumer.class
\servicemix.xml
2。对于provider,它的servicemix.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xbean.org/schemas/spring/1.0"
xmlns:spring="http://xbean.org/schemas/spring/1.0"
xmlns:sm="http://servicemix.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xbean.org/schemas/spring/1.0 ../../conf/spring-beans.xsd
http://servicemix.org/config/1.0 ../../conf/servicemix.xsd"
xmlns:my="http://servicemix.org/demo/">
<!-- the JBI container -->
<sm:container name="jbi1" flowName="cluster" spring:id="jbi" rootDir="../wdir" useMBeanServer="true"
createMBeanServer="true" installationDirPath="../install"
monitorInstallationDirectory="true" dumpStats="true"
statsInterval="10" transactionManager="#transactionManager">
<sm:activationSpecs>
<sm:activationSpec componentName="provider" service="my:provider"
destinationService="my:consumer">
<sm:component>
<bean xmlns="http://xbean.org/schemas/spring/1.0"
class="my.components.MsgProvider"/>
</sm:component>
</sm:activationSpec>
</sm:activationSpecs>
</sm:container>
<!-- message broker -->
<bean id="broker" class="org.activemq.spring.BrokerFactoryBean">
<property name="config" value="classpath:activemq.xml" />
</bean>
<bean id="transactionContextManager" class="org.jencks.factory.TransactionContextManagerFactoryBean"/>
<bean id="transactionManager" class="org.jencks.factory.GeronimoTransactionManagerFactoryBean" />
<bean id="jmsFactory" class="org.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean class="org.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
</property>
</bean>
</beans>
3。对于consumer,它的servicemix.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xbean.org/schemas/spring/1.0"
xmlns:spring="http://xbean.org/schemas/spring/1.0"
xmlns:sm="http://servicemix.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xbean.org/schemas/spring/1.0 ../../conf/spring-beans.xsd
http://servicemix.org/config/1.0 ../../conf/servicemix.xsd"
xmlns:my="http://servicemix.org/demo/">
<!-- the JBI container -->
<sm:container name="jbi2" flowName="cluster" spring:id="jbi" rootDir="../wdir" useMBeanServer="true"
createMBeanServer="true" installationDirPath="../install"
monitorInstallationDirectory="true" dumpStats="true"
statsInterval="10" transactionManager="#transactionManager">
<sm:activationSpecs>
<sm:activationSpec componentName="consumer" service="my:consumer">
<sm:component>
<bean xmlns="http://xbean.org/schemas/spring/1.0"
class="my.components.MsgConsumer"/>
</sm:component>
</sm:activationSpec>
</sm:activationSpecs>
</sm:container>
<!-- message broker -->
<bean id="broker" class="org.activemq.spring.BrokerFactoryBean">
<property name="config" value="classpath:activemq.xml" />
</bean>
<bean id="transactionContextManager" class="org.jencks.factory.TransactionContextManagerFactoryBean"/>
<bean id="transactionManager" class="org.jencks.factory.GeronimoTransactionManagerFactoryBean" />
<bean id="jmsFactory" class="org.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean class="org.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
</property>
</bean>
</beans>
4。把它们发布到不同的机器上,分别运行,不久就会有输出。
如果要在同一台机器上做实验,那么需要做的改动:
1。对于consumer使用另一个activemq.xml,这个文件可以从%SERVICEMIX_HOME%/conf/activemq.xml中复制一份到consumer的mytest2目录中。
2。改变activemq.xml:
- 修改tcp://localhost:61616 => tcp://localhost:61617 原来的端口provider占用
- 修改../var/journal => var/journal 原来的目录被provider占用
- 修改数据源为mysql-ds,原来使用的是apache derby,但是此时被provider占用无法创建。
- 根据mysql的设置配置用户名和口令,一般是root/root
3。在mysql中创建数据库activemq
4。改变mytest2的servicemix.xml:
- 修改classpath:activemq.xml => activemq.xml 使用当前目录下的activemq.xml
- 修改tcp://localhost:61616 => tcp://localhost:61617
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。