`

在Spring中使用JMS

阅读更多
准备工作:

熟悉下JMS的基础知识,这里不再罗嗦,主要是实战。

配置JMS需要两个对象connectionFactory和 destination。

connectionFactory使用jboss自带的TopicConnectionFactory。

destination可以使用自定义的。

kiral-jms-service.xml   注意:文件名称一定要是-service.xml结尾。这个文件放在部署目录下。


xml 代码

< xml   version = "1.0"   encoding = "UTF-8" ?>   
< server >   
   < mbean   code = "org.jboss.mq.server.jmx.Topic"   
      name = "jboss.mq.destination:service=Topic,name=kiralJms" >   
     < depends   optional-attribute-name = "DestinationManager" > jboss.mq:service = DestinationManager depends >   
     < depends   optional-attribute-name = "SecurityManager" > jboss.mq:service = SecurityManager depends >   
     < attribute   name = "SecurityConf" >   
       < security >   
         < role   name = "guest"   read = "true"   write = "true" />   
         < role   name = "publisher"   read = "true"   write = "true"   create = "false" />   
         < role   name = "durpublisher"   read = "true"   write = "true"   create = "true" />   
       security >   
     attribute >   
   mbean >   
  server >    


发送消息端

bean-jms.xml

xml 代码
xml   version = "1.0"   encoding = "GB2312" ?>  
< beans >   
     < bean   id = "jmsConnectionFactory"   
         class = "org.springframework.jndi.JndiObjectFactoryBean" >   
         < property   name = "jndiName" >   
             < value > TopicConnectionFactory value >   
         property >   
     bean >   
       
     < bean   id = "destination"   
         class = "org.springframework.jndi.JndiObjectFactoryBean" >   
         < property   name = "jndiName" >   
             < value > topic/kiralJms value >   
         property >   
     bean >   
  
       
     < bean   id = "jmsTemplate"   
         class = "org.springframework.jms.core.JmsTemplate" >   
         < property   name = "connectionFactory" >   
             < bean   
                 class = "org.springframework.jms.connection.SingleConnectionFactory" >   
                 < property   name = "targetConnectionFactory"   
                     ref = "jmsConnectionFactory"   />   
             bean >   
         property >   
     bean >   
  
       
     < bean   id = "messageProducer"   
         class = "jms.MessageProducer" >   
         < property   name = "template"   ref = "jmsTemplate"   />   
         < property   name = "destination"   ref = "destination"   />   
     bean >   
beans >   



java 代码
import  javax.jms.Destination;   
import  javax.jms.JMSException;   
import  javax.jms.Message;   
import  javax.jms.Session;   
  
import  org.springframework.jms.core.JmsTemplate;   
import  org.springframework.jms.core.MessageCreator;   
  
/***********************************************************  
* 消息发送者  
*   
* @作者:kiral  
* @日期:2007-7-3  
**********************************************************/   
public   class  MessageProducer {   
  
     public   void  send( final  String message) {   
        template.send(destination,  new  MessageCreator() {   
             public  Message createMessage(Session session)  throws  JMSException {   
                Message m = session.createTextMessage(message);   
                 return  m;   
            }   
        });   
    }   
  
     private  JmsTemplate template;   
  
     private  Destination destination;   
  
     public   void  setDestination(Destination destination) {   
         this .destination = destination;   
    }   
  
     public   void  setTemplate(JmsTemplate template) {   
         this .template = template;   
    }   
  
}  

发送方调用send方法发送消息。



消息接收者

xml 代码
< xml   version = "1.0"   encoding = "UTF-8" ?>   
  
< beans >   
     < bean   id = "jmsConnectionFactory"   
         class = "org.springframework.jndi.JndiObjectFactoryBean" >   
         < property   name = "jndiName" >   
             < value > TopicConnectionFactory value >   
         property >   
    < bean >   
     < bean   id = "destination"   
         class = "org.springframework.jndi.JndiObjectFactoryBean" >   
         < property   name = "jndiName" >   
             < value > topic/kiralJms value >   
         property >   
    < bean >   
  
       
     < bean   id = "messageListener"   
         class = "jms.MessageConsumer" >   
         < property   name = "worksheetService"   ref = "worksheetService" > property >   
    < bean >   
  
       
     < 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 >   
< beans >   



java 代码
import  javax.jms.Message;   
import  javax.jms.MessageListener;   
  
import org.kiral.flow.service.WorksheetService;   
  
/*******************************************************************************  
* 消息接收者  
*   
* @作者:kiral  
* @日期:2007-7-3  
******************************************************************************/   
public   class  MessageConsumer  implements  MessageListener {   
  
     private  WorksheetService worksheetService;   
  
     public  WorksheetService getWorksheetService() {   
         return  worksheetService;   
    }   
  
     public   void  setWorksheetService(WorksheetService worksheetService) {   
         this .worksheetService = worksheetService;   
    }   
  
     public   void  onMessage(Message message) {   
        System.out.println(message);   
        worksheetService.updateRole();   
    }   
  
}  

接受方一旦接收到消息,就会打印在控制台。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics