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
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。

相关项目