zoukankan      html  css  js  c++  java
  • SpringBoot整合ActiveMq实现Queue和Topic两种模式(看不懂你来打我)

    一、前言

    最近小编在学习消息队列,然后选中了ActiveMq,来进行学习.于是探索了好久,来整理一下自己的学习心得!大家一起学习,希望对你有用.我把一些我自己的理解写在注释里了注意看!!

    二、ActiveMq的下载和使用

    • 下载

    大家直接下载解压就可以使用了--->
    链接:https://pan.baidu.com/s/1W0MZtQAya0mOEKMWqJK1iA
    提取码:29mz

    • 使用
      在这里插入图片描述

    三、依赖准备

    	<!-- activemq -->
    	<dependency>
    	   <groupId>org.springframework.boot</groupId>
    	   <artifactId>spring-boot-starter-activemq</artifactId>
    	</dependency>
    

    四、yml文件配置

    spring:
     activemq:
      broker-url: tcp://127.0.0.1:61616
      user: admin
      password: admin
      jms:
       pub-sub-domain: true # 默认为false:queue   true:topic
    queue: queue_mq # 点对点消费名字
    topic: topic_mq # 订阅式消费名字
    

    五、配置Bean

    import org.apache.activemq.command.ActiveMQQueue;
    import org.apache.activemq.command.ActiveMQTopic;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jms.annotation.EnableJms;
    
    import javax.jms.Queue;
    import javax.jms.Topic;
    
    @Configuration
    @EnableJms
    public class ActiveMqConfig {
    
        @Value("${queue}")//对应yml文件中定义的queue
        private String queue;
    
        @Value("${topic}")//对应yml文件中定义的topic
        private String topic;
        /**
         * 创建点对点的队列  一个消息只能被一个消费者消费  --- 一对一
         * @return
         */
        @Bean
        public Queue queue(){
            return new ActiveMQQueue(queue);
        }
        /**
         * 创建订阅式的队列  一个消息可以被多个消费者消费 --- 一对多
         * @return
         */
        @Bean
        public Topic topic(){
            return new ActiveMQTopic(topic);
        }
    }
    

    六、创建生产者(Queue+Topic)

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsMessagingTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.jms.Queue;
    import javax.jms.Topic;
    
    @RestController
    public class ProducerController {
    
        @Autowired
        private Queue queue;
    
        @Autowired
        private Topic topic;
    
        @Autowired
        private JmsMessagingTemplate jmsMessagingTemplate;
    
        /**
         * 点对点的消息队列的生产者
         * @param string
         */
        @GetMapping("/queue")
        public void sendMsgQueue(@RequestParam String string){
            System.out.println("消息已经发送,准备被消费,消息为 ---> "+string);
            jmsMessagingTemplate.convertAndSend(queue,string);
        }
    
        /**
         * 一对多的消息队列的生产者
         * @param string
         */
        @GetMapping("/topic")
        public void sendMsgTopic(@RequestParam String string){
            System.out.println("消息已经发送,准备被消费,消息为 ---> "+string);
            jmsMessagingTemplate.convertAndSend(topic,string);
        }
    
    }
    

    七、创建消费者(Topic模式下)

    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class TopicConsumer {
        
        /**
         * 监听消息,名字为生产者发送的名字,要一致,不然监听不到.
         * 因为是订阅者模式,可以有多个消费者,我们这里举两个来进行测试
         * @param string
         */
        @JmsListener(destination = "${topic}")
        public void consumerTopicOne(String string){
    
            System.out.println("我是消费者一号:消费消息成功,信息为---> "+string);
    
        }
    
        @JmsListener(destination = "${topic}")
        public void consumerTopicTwo(String string){
    
            System.out.println("我是消费者二号:消费消息成功,信息为---> "+string);
    
        }
    }
    
    

    八、测试结果(Topic模式下)

    在这里插入图片描述

    九、ActiveMq网页版查看是否成功(Topic模式下)

    网站地址 http://127.0.0.1:8161/admin/ 账号密码都是admin

    在这里插入图片描述
    在这里插入图片描述

    十、创建消费者(Queue模式下)

    首先把yml文件中的配置修改为Queue:pub-sub-domain: false

    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class QueueConsumer {
    
        /**
         * 监听消息,名字为生产者发送的名字,要一致,不然监听不到.
         * 因为是队列模式,只能消费者
         * @param string
         */
        @JmsListener(destination = "${queue}")
        public void consumerQueue(String string){
    
            System.out.println("消费消息成功,信息为---> "+string);
        }
    
    }
    

    十一、测试结果(Queue模式下)

    在这里插入图片描述

    十二、ActiveMq网页版查看是否成功(Queue模式下)

    在这里插入图片描述

    十三、总结

    这样我们就搭建好了,并且测试没有问题,有问题留言哦.比较合适刚刚学习的童鞋们,期待您的关注,一起学习,一起提高哦!!!

  • 相关阅读:
    常见树的总结
    《深入理解Java虚拟机》读书笔记(第三章)
    《Jave并发编程的艺术》学习笔记(1-2章)
    Java多线程与并发之面试常问题
    Morris遍历-如何用空间复杂度O(1)来遍历二叉树
    BFPRT算法
    Manacher
    maven基础
    play framework + sbt入门之环境搭建
    rancher部署kubernets集群
  • 原文地址:https://www.cnblogs.com/wang1221/p/15187829.html
Copyright © 2011-2022 走看看