1. 程式人生 > >springboot+activemq基本使用

springboot+activemq基本使用

  • 匯入activemq啟動器

      <!-- ActiveMQ的啟動器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-activemq</artifactId>
            </dependency>
    
  • application.properties的配置資訊

    ###MQ配置
    spring.activemq.broker-url=tcp://127.0.0.1:61616
    //# 是否使用內建的MQ, true  使用; fale  不使用
    spring.activemq.in-memory=false
    spring.activemq.password=admin
    spring.activemq.user=admin
    
  • 匯入activemq配置類

    package com.czxy.config;
    import javax.jms.Queue;
    import javax.jms.Topic;
    import org.apache.activemq.command.ActiveMQQueue;
    import org.apache.activemq.command.ActiveMQTopic;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Configuration
    public class ActiveMQConfig {
    	@Bean
    	public Queue queue() {
    		 return new ActiveMQQueue("czxy.queue");
    	}
    	@Bean
    	public Topic topic() {
    		return new ActiveMQTopic("czxy.topic");
    	}
    }
    
  • 編寫生產者

    @Componet
    @EnableScheduling
    public class QueueProducer {  
    	/*
    	 * @Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate對JmsTemplate進行了封裝
    	 * private JmsMessagingTemplate jmsTemplate; //
    	 * 傳送訊息,destination是傳送到的佇列,message是待發送的訊息
    	 * 
    	 * @Scheduled(fixedDelay=3000)//每3s執行1次 
    	   public void sendMessage(Destination destination, final String message){
    	      jmsTemplate.convertAndSend(destination, message); 
    	   }
    	 */
    
        @Autowired
        private JmsMessagingTemplate jmsMessagingTemplate;
    
        @Autowired
        private Queue queue;
    
        @Scheduled(fixedDelay=3000)//每3s執行1次
        public void send() {
           try {
    		
    		   MapMessage mapMessage = new ActiveMQMapMessage();
    		   mapMessage.setString("info", "你還在睡覺");
    		   
    		   this.jmsMessagingTemplate.convertAndSend(this.queue, mapMessage);
    		   
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        }
    }  
    
  • 編寫消費者

    @Component  
    public class QueueConsumer {  
        //使用JmsListener配置消費者監聽的佇列,其中Message是接收到的訊息  
    	@JmsListener(destination = "czxy.queue")  
        public void receiveQueue(Message message) {
    		try {
    			MapMessage mapMessage = (MapMessage) message;
    			String info = mapMessage.getString("info");
    			System.out.println(info);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
        } 
    }