技术开发 频道

集成ActiveMQ4.1和Spring2.0的Message Driven POJO

3. 配置方案

3.1 基础零件 

1. 配置ActiveMQ Broker  

   暂时采用在JVM中嵌入这种最简单的模式,  当spring初始化时候,ActiveMQ embedded Broker 就会启动了。

<!--  lets create an embedded ActiveMQ Broker -->
 
<amq:broker useJmx="false" persistent="false">
      
<amq:transportConnectors>
            
<amq:transportConnector uri="tcp://localhost:0"/>
     
</amq:transportConnectors>
 
</amq:broker>

 

2. 配置(A)ConnectionFactory

  由于前面配置的Broker是JVM embedded 所以URL为:vm://localhost

<!--  ActiveMQ connectionFactory to use  -->
 
<amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost"/>

3 配置(B)Queue

<!--  ActiveMQ destinations to use  -->
 
<amq:queue name="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>

 

4. 配置(C)Converter

   配置Conveter,使得Producer能够直接发送Order对象,而不是JMS的Message对象。

<!--  OrderMessage converter  -->
 
<bean id="orderMessageConverter" class="org.springside.bookstore.components.activemq.OrderMessageConverter"/>  

 

3.2  发送端 

1 配置JmsTemplate

   Spring提供的Template,绑定了(A)ConnectionFactory与(C)Converter。

<!--  Spring JmsTemplate config -->
 
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  
<property name="connectionFactory">
   
<!--  lets wrap in a pool to avoid creating a connection per send -->
   
<bean class="org.springframework.jms.connection.SingleConnectionFactory">
    
<property name="targetConnectionFactory" ref="jmsConnectionFactory"/>
   
</bean>
  
</property>
  
<!-- custom MessageConverter -->
  
<property name="messageConverter" ref="orderMessageConverter"/>
 
</bean>

 

2.Producer

   消息发送者,使用JmsTemplate发送消息,绑定了JmsTemplate(含A、C 与(B)Queue。

<!-- POJO which send Message uses  Spring JmsTemplate,绑定JMSTemplate 与Queue -->
 
<bean id="orderMessageProducer" class="org.springside.bookstore.components.activemq.OrderMessageProducer">
  
<property name="template" ref="jmsTemplate"/>
  
<property name="destination" ref="destination"/>
 
</bean>

 

3.3 接收端

  1.接收处理者(MDP)

    使用Spring的MessageListenerAdapter,指定负责处理消息的POJO及其方法名,绑定(C)Converter。

 

  <!--  Message Driven POJO (MDP),绑定Converter -->
 
<bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
  
<constructor-arg>
   
<bean class="org.springside.bookstore.components.activemq.OrderMessageConsumer">
    
<property name="mailService" ref="mailService"/>
   
</bean>
  
</constructor-arg>
  
<!--  may be other method -->
  
<property name="defaultListenerMethod" value="sendEmail"/>
  
<!-- custom MessageConverter define -->
  
<property name="messageConverter" ref="orderMessageConverter"/>
 
</bean> 

 

2. listenerContainer

    负责调度MDP, 绑定(A) connectionFactory, (B)Queue和接收处理者(MDP)。

 

<!--  this is the attendant message listener container -->
 
<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  
<property name="connectionFactory" ref="jmsConnectionFactory"/>
  
<property name="destination" ref="destination"/>
  
<property name="messageListener" ref="messageListener"/>
 
</bean>
0
相关文章