再论"如果系统中还有其他的异步服务"

阅读更多

        SpringSide2论坛中的一则贴子讨论了ActiveMQ在设置多个异步服务时方法(activeMQ的疑问?),最近的项目中也遇到了类似的需求,需要多项异步服务,按照帖子中的设置进行了多次实践均不能成功,始终只有一个listener在后台监听。由于项目时间进度要求比较紧,没有再进行深入研究,利用代理的设计方法暂时解决了多个异步服务的需求。

  

java 代码
  1. package cn.org.coral.core.jms;   
  2.   
  3. /**  
  4.  * JMS消息接收者接口  
  5.  * @author lib  
  6.  *  
  7.  */  
  8. public interface MQReceiver {   
  9.     /**  
  10.      * 消息对象处理方法  
  11.      * @param object  
  12.      */  
  13.     void dispose(java.io.Serializable object);   
  14. }   

java 代码

  1. package cn.org.coral.core.jms;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. /**  
  6.  * 消息对象的处理适配器接口  
  7.  * @author Lib  
  8.  *  
  9.  */  
  10. public interface MQAdapter extends Serializable {   
  11.     /**  
  12.      * 得到服务的名称,将根据服务名称得到服务  
  13.      * 对象的实例,对消息对象进行处理  
  14.      * @return  
  15.      */  
  16.     public String obtainServiceName();   
  17. }   

 

java 代码
  1. package cn.org.coral.core.jms.imp;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. import org.apache.commons.lang.StringUtils;   
  6. import org.apache.commons.logging.Log;   
  7. import org.apache.commons.logging.LogFactory;   
  8.   
  9. import cn.org.coral.core.jms.MQAdapter;   
  10. import cn.org.coral.core.jms.MQReceiver;   
  11. import cn.org.coral.core.utils.ServiceLocator;   
  12.   
  13. /**  
  14.  * JMS消息接收者公共代理,将不同的消息对象送给对应的服务进行处理  
  15.  * @author lib  
  16.  *  
  17.  */  
  18. public class MQReceiverProxyImpl implements MQReceiver {   
  19.   
  20.     Log logger = LogFactory.getLog(this.getClass());   
  21.        
  22.     /* (non-Javadoc)  
  23.      * @see cn.org.coral.core.jms.MQReceiver#dispose(java.io.Serializable)  
  24.      */  
  25.     public void dispose(Serializable object) {   
  26.            
  27.         if(object instanceof MQAdapter) {   
  28.                
  29.             MQAdapter adapter = (MQAdapter)object;   
  30.             String serviceName = adapter.obtainServiceName();   
  31.             if(StringUtils.isNotBlank(serviceName)){   
  32.                 MQReceiver receiver = (MQReceiver) ServiceLocator.getBean(serviceName);   
  33.                 receiver.dispose(object);   
  34.             }else{   
  35.                    
  36.                 logger.error(" Object:["+object+"]'s receiver is empty!");   
  37.                    
  38.             }   
  39.                
  40.         }else{   
  41.            
  42.             logger.error(" Object:"+object+" not find receiver!");   
  43.                
  44.         }   
  45.     }   
  46.   
  47. }   

 

xml 代码
  1.   
  2. <bean id="messageConverter" class="cn.org.coral.core.jms.MQConverter"/>  
  3.   
  4.   
  5. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
  6.     <property name="connectionFactory">  
  7.           
  8.         <bean class="org.springframework.jms.connection.SingleConnectionFactory">  
  9.             <property name="targetConnectionFactory" ref="jmsConnectionFactory"/>  
  10.         bean>  
  11.     property>  
  12.       
  13.     <property name="messageConverter" ref="messageConverter"/>  
  14. bean>  
  15.   
  16.   
  17. <amq:queue name="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/>  
  18.   
  19.   
  20. <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">  
  21.     <constructor-arg>  
  22.           
  23.         <bean class="cn.org.coral.core.jms.imp.MQReceiverProxyImpl"/>  
  24.     constructor-arg>  
  25.     <property name="defaultListenerMethod" value="dispose"/>  
  26.       
  27.     <property name="messageConverter" ref="messageConverter"/>  
  28. bean>  
  29.   
  30.   
  31. <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  32.     <property name="connectionFactory" ref="jmsConnectionFactory"/>  
  33.     <property name="destination" ref="destination"/>  
  34.     <property name="messageListener" ref="messageListener"/>  
  35. bean>  

你可能感兴趣的:(JMS,Bean,ActiveMQ,Java,Spring)