相关推荐recommended
《SpringBoot篇》25.SpringBoot整合ActiveMQ
作者:mmseoamin日期:2023-12-11
陈老老老板🦸
👨‍💻本文专栏:SpringBoot篇(主要讲一些与springboot整合相关的内容)

👨‍💻本文简述:本文讲一下SpringBoot整合ActiveMQ的整合教程,特别详细。

👨‍💻上一篇文章: 《SpringBoot篇》24.SpringBoot整合Freemarker超详细教程

👨‍💻有任何问题,都可以私聊我,在文章最后也可以加我的vx。感谢支持!

🦹我认为人人都可以学好编程,我愿意成为你的领路人!

《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第1张

一、ActiveMQ简介

1.简介:

在先学习整合之前先了解一下ActiaveMQ,ActiveMQ是早期MQ产品之一,是使用JAVA语言编写。大部分现在的项目可能已经不使用,但是公司中的产品咱也说不准,所以还是要学习一下的。简单来说就是用作服务间的通信。以下是官方解释:

Apache ActiveMQ是最流行的开源、多协议、基于Java的消息代理。它支持行业标准协议,因此用户可以在广泛的语言和平台上获得客户端选择的好处。从用JavaScript、C、C++、Python、.Net等编写的客户端连接。使用无处不在的AMQP协议集成多平台应用程序。通过websockets使用STOMP在web应用程序之间交换消息。ActiveMQ提供了支持任何消息传递用例的功能和灵活性。

2.作用:

    1. 降低服务之间代码耦合,按功能将一个整体的项目进行分割成多个系统,比如将报告系统、短信系统分割出来。
    1. 使用消息队列,增加系统并发处理量,这样并发量就可以变高了,根据不同的消息通信机制,选择合适的发送模式。

    3.特性:

      1. 实现松耦合:ActiveMQ以异步的形式提供松耦合的应用架构,也就是说生产者和消费者互不影响。
      1. 遵循JMS规范:ActiveMQ的各种特性是JMS1.1规范的实现。JMS规范保证了同步和异步消息传递、一次和仅一次的传递、对于订阅者的消息持久化。
      1. 支持多种连接协议:ActiveMQ提供了各种连接选择,包括HTTP、HTTPS、SSL、TCP、UDP、XMPP、IP多点传送等。
      1. 提供多种客户端接口:ActiveMQ对多种编程语言提供了API接口,例如C/C++、java 、.NET、PHP、Python和Perl等版本。
      1. 支持多种应用服务器:ActiveMQ与Java应用服务器很好地集成。
      1. 提供持久性:ActiveMQ拥有多种持久性方案可供选择。
      1. 提供安全保障:ActiveMQ可以按自己的需求定制安全等级,既可以通过配置文件提供简单的验证和授权,也可以实现标准的JAAS登录模块。
      1. 支持代理集群:为了更好的扩展性,多个ActiveMQ代理可以通过代理网络(Network of Brokers)进行联合的工作。
      1. 提供简单的管理:ActiveMQ提供了各种简便而又强大的管理方式,除了Java语言中最基本的JConsole,还有ActiveMQ Web Console、消息报告和各种系统日志等。

      二、ActiveMQ的下载与安装

      1.下载:

      (1).不想麻烦直接去我网盘下载,这是5.16.5的版本,适配与jdk1.8.这里要注意每个版本适配的jdk版本可能不一样。网盘链接:ActiveMQ压缩包,提取码CLLB。

      (2).去官网下载,官网地址:ActiveMQ官网,点击下载5.16.5版本适配jdk1.8

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第2张

      2.安装:

      (1)直接进行解压就能使用。

      (2)点击进入bin,win64,activemq.bat就能就行使用了。

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第3张

      3.错误:

      分析日志错误:运行发现报错,通过日志可以看出是端口被占用。

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第4张

      解决问题:首先应该想到查看是什么服务占用了5672端口,打开命令窗口,

      如果想查看PID输入tasklist|findstr “5672”

      如果想查看所有有关“5672”的服务可以输入netstat -aon|findstr “5672”

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第5张

      将进程杀死就ok了,输入taskkill -f -pid 7816 。在重新启动。

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第6张

      4.测试

      再次打开avtivemq,在浏览器网址栏输入

      http://127.0.0.1:8161/
      

      会进入activemq的可视化界面,用户名密码都是admin

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第7张

      点击manage进入控制台:

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第8张

      点击Queues查看使用到的队列:

      《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第9张

      三、SpringBoot整合ActiveMQ

      1.创建项目:

      运行环境:

      • springboot 2.7.6
      • lombok

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第10张

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第11张

        2.添加依赖

        
            org.springframework.boot
            spring-boot-starter-activemq
        
        

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第12张

        3.配置文件

        spring:
          activemq:
            broker-url: tcp://localhost:61616
        

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第13张

        4.实现类

        实现接口MessageService

        public interface MessageService {
            void sendMessage(String message);
            String doMessage();
        }
        

        实现类MessageServiceImpl

        @Service
        public class MessageServiceImpl implements MessageService{
            @Autowired
            private JmsMessagingTemplate jmsMessagingTemplate;
            @Override
            public void sendMessage(String message) {
                System.out.println("等待发送的信息为:" + message);
                jmsMessagingTemplate.convertAndSend("order.queue.message",message);
            }
            @Override
            public String doMessage() {
                String message = jmsMessagingTemplate.receiveAndConvert("order.queue.message",String.class);
                System.out.println("已经接收到信息:" + message);
                return message;
            }
        }
        

        5.使用监听器自动消费

        @Component
        public class MessageListener {
           @JmsListener(destination = "order.queue.message")
           private void receive(String message){
               System.out.println("自动接收到消息:"+ message);
           }
        }
        

        6.测试类

        @SpringBootTest
        class ActivemqApplicationTests {
            @Autowired
            private MessageService messageService;
            @Test
            void sendmessage() {
                String message = "陈老老老板";
                messageService.sendMessage(message);
            }
        	
        	//这个是手动消费,如果使用了监听器就会自动消费
        	@Test
            void domessage() {
                messageService.doMessage();
            }
        }
        

        成功效果:

        没有监听器:

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第14张

        使用监听器:

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第15张

        在可视化中也可以看到消息的生产与消费

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第16张

        7.扩展知识

        说明:扩展监听器功能,@SendTo将消息处理完继续发送继续处理

        @Component
        public class MessageListener {
            @JmsListener(destination = "order.queue.message")
            @SendTo("other.queue")	
            private String receive(String message){
                System.out.println("自动接收到order.queue.message消息:"+ message);
        //        注意是将此方法的返回值返回到 新的队列中
                return message;
            }
            @JmsListener(destination = "other.queue")
            private void  receiveOther(String message){
                System.out.println("接收到other.queue继续发送的消息:" + message);
            }
        }
        

        成功演示:

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第17张

        《SpringBoot篇》25.SpringBoot整合ActiveMQ,在这里插入图片描述,第18张

        总结:SpringBoot整合ActiveMQ超详细教程。希望对您有帮助,感谢阅读

        结束语:裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。

        勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。