Spring統合JMSによるActiveMQ接続


接続ファクトリの管理
JmsTemplateメッセージを送信および受信するためのテンプレートクラス
MessageListernerメッセージリスナー
ConnectionFactory
Springが提供する接続プール
JmsTemplateはメッセージを送るたびに接続、セッション、producerを再作成します.
SpringではSingleConnectionFactoryとCachingConnectionFactoryが提供されています(SingleConnectionFactoryがキャッシュされています)
 
JmsTemplateはspringで提供されており、springコンテナにこのクラスを注入するだけでJmsTemplateを使用して操作が容易になりますjms JmsTemplateクラスはスレッドが安全で、アプリケーション全体で使用できます.
 
MessageListernerは、1つのMessageパラメータのみを受信するonMessageメソッドを実装する
 
pomファイルに参照orgを追加する.springframework       spring-jms       ${spring.version}    
                    org.apache.activemq             activemq-core             5.7.0                                                             spring-context                     org.springframework                                    
web.xml    


  contextConfigLocation
  
      classpath:applicationContext*.xml
  

applicationContext-common.xml


    
    

    
        
        
    

    
    
        
        
    

    
    
        
    

    
    
        
    


    
    




 
applicationContext-producer.xml



    
    

    
    
        
        
        
        
    


 
applicationContext-consumer.xml



    
    

    
    

    
    

package com.imooc.mvcdemo.service.impl;

import com.imooc.mvcdemo.service.ProducerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.jms.*;

/**
 * @author Jas
 * @create 2018-04-14 9:21
 **/
@Service
public class ProducerServiceImpl implements ProducerService {

    @Resource(name = "jmsTemplate")
    private JmsTemplate jmsTemplate;



    public void sendMessage(final String message) {
        Destination destination = jmsTemplate.getDefaultDestination();
        System.out.println(Thread.currentThread().getName()+"    "+destination.toString()+"    ---------------------->"+message);
        jmsTemplate.send(new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                TextMessage textMessage = session.createTextMessage(message);
                return textMessage;
            }
        });
        System.out.println("     :" + message);
    }

    public void sendMessage(Destination destination,final String message){
        System.out.println(Thread.currentThread().getName()+"    "+destination.toString()+"    ---------------------->"+message);
        jmsTemplate.send(destination, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
    }

}
package com.imooc.mvcdemo.service.impl;

import com.imooc.mvcdemo.service.ConsumerService;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;

/**
 * Created by QXJJ1697 on 2018/7/16.
 */
@Service
public class ConsumerServiceImpl implements ConsumerService {

    @Resource(name="jmsTemplate")
    private JmsTemplate jmsTemplate;

    public TextMessage receive(Destination destination){
        TextMessage textMessage = (TextMessage) jmsTemplate.receive(destination);
        try{
            System.out.println("   " + destination.toString() + "     :\t"
                    + textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
        return textMessage;
    }
}

 
package com.imooc.mvcdemo.listener;

import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

/**
 * @author Jas
 * @create 2018-04-14 10:07
 **/
public class ConsumerMessageListener implements MessageListener {

    public void onMessage(Message message) {
        TextMessage textMessage = (TextMessage) message;
        try {
            System.out.println("     :" + textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}
package com.imooc.mvcdemo.controller;

import com.imooc.mvcdemo.service.ConsumerService;
import com.imooc.mvcdemo.service.ProducerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.TextMessage;


/**
 * Created by QXJJ1697 on 2018/7/16.
 */

@Controller
@RequestMapping("/message")
public class MessageController {
    private Logger logger = LoggerFactory.getLogger(MessageController.class);
    @Resource(name = "activeMQQueue")
    private Destination destination;

    //       
    @Resource(name = "producerServiceImpl")
    private ProducerService producer;

    //       
    @Resource(name = "consumerServiceImpl")
    private ConsumerService consumer;

    @RequestMapping(value = "/SendMessage", method = RequestMethod.POST)
    @ResponseBody
    public void send(String msg) {
        logger.info(Thread.currentThread().getName()+"------------send to jms Start");
        //producer.sendMessage(msg);
        producer.sendMessage(destination,msg);
        logger.info(Thread.currentThread().getName()+"------------send to jms End");
    }

    @RequestMapping(value= "/ReceiveMessage",method = RequestMethod.GET)
    @ResponseBody
    public void receive(){
        logger.info(Thread.currentThread().getName()+"------------receive from jms Start");
        consumer.receive(destination);
        logger.info(Thread.currentThread().getName()+"------------receive from jms End");
    }
}


上のプロファイルでは、このリスナーのプロファイルをデフォルトで追加しました.このリスナーを使用したくない場合は、直接コメントすることができます.
 
    

    
    

リスナーを使用する効果は、手動でメッセージを受信する効果と同じであることがわかります.
使用spring集成JMS连接ActiveMQ_第1张图片
使用spring集成JMS连接ActiveMQ_第2张图片