结构图

 

 

 

第一步:导入依赖

<dependency>
			  <groupId>org.springframework.boot</groupId>
			  <artifactId>spring-boot-starter</artifactId>
			</dependency>
			<!-- spring boot web支持:mvc,aop... -->
			<dependency>
			  <groupId>org.springframework.boot</groupId>
			  <artifactId>spring-boot-starter-web</artifactId>
			</dependency>
			<dependency>
			  <groupId>org.springframework.boot</groupId>
			  <artifactId>spring-boot-starter-test</artifactId>
			  <scope>test</scope>
			</dependency>
			<dependency>
			  <groupId>org.springframework.boot</groupId>
			  <artifactId>spring-boot-starter-activemq</artifactId>
			</dependency>

  

第二步:创建application.yml配置文件

//消费者的yml
server:
  port: 8081
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin
//在使用发布订阅的时候的开
  #jms:
    #pub-sub-domain: true




//生产者的yml
server:
  port: 8080
  #activemq配置
spring:
  activemq:
    broker-url: tcp://127.0.0.1:61616
    user: admin
    password: admin

  

第三步: 创建生产者,通过JMSTemplate模板发送消息

//队列

package com.wish.producer.producermethod;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class QueueProducer {
    //注入JMSTemplate模板
    @Resource
    private JmsTemplate jmsTemplate;
    //创建方法
    public void sendMessage() {
        //点对点,创建队列
        ActiveMQQueue queue = new ActiveMQQueue("boot_queue");
        //发送消息
        jmsTemplate.convertAndSend(queue, "生产者产生的消息~");
        jmsTemplate.setDeliveryMode(2);
        jmsTemplate.setExplicitQosEnabled(true);
        jmsTemplate.setDeliveryPersistent(true);
    }
}


//发布订阅
package com.wish.producer.producermethod;

import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

@Component
public class TopicProducer {
    //注入JMSTemplate模板
    @Resource
    private JmsTemplate jmsTemplate;
    //创建方法
    public void sendMessage(){
        //发布订阅:创建主题
        ActiveMQTopic topic=new ActiveMQTopic("boot_topic");
        //springboot默认是queue
        jmsTemplate.setPubSubDomain(true);
        //发送消息
        jmsTemplate.convertAndSend(topic,"生产者产生主题的消息~");

    }
}

  

第四步:创建客户端访问的方法

//队列
package com.wish.producer.controller;

import com.wish.producer.producermethod.QueueProducer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class QueueController {
    @Resource
    private QueueProducer queueProducer;

    @RequestMapping("/sendQueueMessage")
    public String sendMessage(){
        queueProducer.sendMessage();
        return "QueueSuccess";
    }
}


//发布订阅
package com.wish.producer.controller;

import com.wish.producer.producermethod.TopicProducer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
@RestController
public class TopicController {
    @Resource
    private TopicProducer topicProducer;

    @RequestMapping("/sendTopicMessage")
    public String sendMessage(){
        topicProducer.sendMessage();
        return "TopicSuccess";
    }
}

  

第五步:创建消费者

 //队列
   @JmsListener(destination = "boot_queue")
    public void getMessage(TextMessage message) throws JMSException {
        System.out.println("消费者获取到消息:"+message.getText());
    }


//发布订阅
 @Bean
 public JmsListenerContainerFactory jmsTopicListenerContainerFactory(ConnectionFactory connectionFactory){
     DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
     factory.setConnectionFactory(connectionFactory);
     //这里必须设置为true,false则表示是queue类型
     factory.setPubSubDomain(true);
     return factory;
 }


    //消费者消费  destination队列或者主题的名字
    @JmsListener(destination = "boot_topic",containerFactory = "jmsTopicListenerContainerFactory")
    public void getMessage(TextMessage message) throws JMSException {
        System.out.println("消费者获取到消息:"+message.getText());
    }

  

posted on 2020-02-15 17:03  wishsaber  阅读(249)  评论(0编辑  收藏  举报