系统相关
首页 > 系统相关> > 消息队列-RabbitMQ(Linux下安装RabbitMQ并使用SpringBoot整合)

消息队列-RabbitMQ(Linux下安装RabbitMQ并使用SpringBoot整合)

作者:互联网

Linux下安装RabbitMQ并使用SpringBoot整合

RabbitMQ进阶——更详细的讲解与其底层原理

1.RabbitMQ简介

RabbitMQ是基于AMQP协议的一款消息管理系统,是部署最广泛的开源消息中间件,是最受欢迎的开源消息中间件之一:

官网: http://www.rabbitmq.com/
官方教程:http://www.rabbitmq.com/getstarted.html

AMQP 协议:

总结RabbitMQKafka可靠,Kafka更适合IO高吞吐的处理,一般应用在大数据日志处理或对实时性(少量延迟),可靠性(少量丢数据)要求稍低的场景使用,比如ELK日志收集。

2. Linux中下载和安装

2.1 下载地址

官网下载地址: https://www.rabbitmq.com/download.html

在这里插入图片描述

下载安装压缩包

链接:https://pan.baidu.com/s/1ItHiJJ5NfHOyIzx9tGOh7w
提取码:Gg43

在这里插入图片描述

注意:这里的安装包是centos7安装的包!

2.2 安装步骤

2.2.1 将rabbitmq安装包上传到linux系统中

这里我使用XFTP工具上传,使用XShell 连接云服务器,上传位置为:=/usr/local/src/software/rabbitMQ/,如果对应的文件夹不存在,自己创建一下!

在这里插入图片描述

2.2.2 安装Erlang依赖包

进入目标文件夹下:cd /usr/local/src/software/rabbitMQ/,并查看安装包信息:ls -l
在这里插入图片描述

执行安装Erlang依赖包:rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm
在这里插入图片描述

执行安装Erlang内存管理的依赖包:rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
在这里插入图片描述

2.2.3 安装RabbitMQ安装包(需要联网)

执行安装rabbitmqrpm -ivh rabbitmq-server-3.7.18-1.el7.noarch.rpm

2.2.4 复制配置文件

执行命令:cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config,该命令是将rabbitmq.config.example 配置文件复制到**/etc/rabbitmq/** 下,并该名为rabbitmq.config

注意:如果不知道rabbitmq.config.example 配置文件的具体位置,可以使用命令:find / -name rabbitmq.config.example去查找其位置!

在这里插入图片描述

因为是从/目录开始查找可能会延迟几秒!

2.2.5 查看/修改配置文件

查看配置文件位置:ll /etc/rabbitmq/
在这里插入图片描述

修改配置文件:vim /etc/rabbitmq/rabbitmq.config

开放来宾账户权限loopback_users

在这里插入图片描述

在这里插入图片描述

把注释开放,注意尾部的逗号也去掉:

在这里插入图片描述

3. 相关命令

3.1开启web界面管理工具

命令:rabbitmq-plugins enable rabbitmq_management
在这里插入图片描述

3.2 启动、停止命令

在这里插入图片描述

4. RabbitMQ可视化管理页面

4.1 开放端口

如果是本地虚拟机开放防火墙对应端口,如果是云服务器开放安全组端口:
在这里插入图片描述

用户名和密码默认是我们在配置文件中开启的来宾账户:guest/guest,输入账号密码后进入管理页:
在这里插入图片描述

在这里插入图片描述

有上图可知,为了之后使用代码整合RabbitMq,我们还需要在安全组中开放另外两个端口:

在这里插入图片描述

4.3 管理界面导航介绍

在这里插入图片描述

4.4 Admin用户和虚拟主机管理

4.4.1 添加用户

在这里插入图片描述

上面的Tags选项,其实是指定用户的角色,可选的有以下几个:

在这里插入图片描述

点击给虚拟主机iswhl 设置访问用户以及其权限:

在这里插入图片描述

接下来退出登录,并以leyou用户登录即可!

5. Java API 操作RabbitMQ

5 种消息模型:

在这里插入图片描述

6. Spring Boot 整合RabbiMQ

Spring AMQP 官网地址:https://spring.io/projects/spring-amqp

SpringBoot整合官方文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-messaging

6.1 pom.xml 引入依赖

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

6.2 application.yml 中进行配置

在这里插入图片描述

# Spring 相关配置
spring:
  # RabbitMQ 相关配置
  rabbitmq:
    # 主机ip地址
    host: 8.xxx.xx.xx6
    # 授权用户名
    username: leyou
    # 授权用户密码
    password: leyou
    # 授权虚拟主机名称
    virtual-host: leyou

6.3 RabbitMQ 监听器(消息消费者)组件注入IOC

package com.iswhl.component;

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * RabbitMQ 监听器组件:相当于消费者
 */
@Component
public class Listener {

    @RabbitListener(bindings = @QueueBinding(
            // value = "spring.test.queue" 队列名称
            // durable = "true" 队列消息持久化
            value = @Queue(value = "spring.test.queue", durable = "true"),
            // value = "spring.test.exchange" 交换机名称
            // durable = "true" 交换机消息持久化
            // ignoreDeclarationExceptions = "true" 忽略声明异常
            // type = ExchangeTypes.TOPIC 交换机类型:TOPIC
            exchange = @Exchange(
                    value = "spring.test.exchange",
                    ignoreDeclarationExceptions = "true",
                    type = ExchangeTypes.TOPIC
//                    durable = "true"
            ),
            // 消息接收的路由表达式
            key = {"#.#"}))

    public void listen(String msg) {
        System.out.println("接收到消息:" + msg);
    }
}

6.4 Test 测试模拟消息生产者

package com.iswhl;

import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class RabbitMqApplicationTests {

    // 注入AmqpTemplate模板
    @Autowired
    private AmqpTemplate amqpTemplate;

    @Test
    public void testSend() throws InterruptedException {
        String msg = "hello, Spring boot amqp";
        // 通过AmqpTemplate模板发送消息
        // 参数1:交换机
        // 参数2:a.b是否符合监听组件(消息消费者)中定义的消息接收的路由表达式
        // 参数3:消息内容
        this.amqpTemplate.convertAndSend("spring.test.exchange","a.b", msg);
        // 等待10秒后再结束
        Thread.sleep(10000);
    }


}

6.5 执行测试

在这里插入图片描述

可以看到消息生产后,被消息监听器(消费者)接收成功!

交换机
// 参数2:a.b是否符合监听组件(消息消费者)中定义的消息接收的路由表达式
// 参数3:消息内容
this.amqpTemplate.convertAndSend(“spring.test.exchange”,“a.b”, msg);
// 等待10秒后再结束
Thread.sleep(10000);
}

}


### 6.5 执行测试

[外链图片转存中...(img-5dhK51Qs-1643182704854)]

可以看到消息生产后,被消息监听器(消费者)接收成功!

标签:SpringBoot,队列,spring,rabbitmq,消息,Linux,RabbitMQ,AMQP
来源: https://blog.csdn.net/Ghoul___/article/details/122703233