RabbitMQ—消息队列

本文详细介绍了RabbitMQ的安装配置过程,包括在Linux上的步骤和管理界面的启动。接着讲解了RabbitMQ的工作模式,如简单、工作、订阅和路由模式。还探讨了交换机和队列管理,以及如何在SpringBoot应用中使用RabbitMQ。此外,文章还提到了消息的可靠性和延迟机制,以及RabbitMQ在解耦、异步处理、消息通信、流量削峰和日志处理等场景的应用。
摘要由CSDN通过智能技术生成

一、RabbitMQ介绍

RabbitMQ是一个在AMQP( 一个提供统一消息服务的应用层标准高级消息队列协议)基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。

  • 主要特性:
    • 保证可靠性:使用一些机制来保证可靠性,如持久化、传输确认、发布确认灵活的路由功能
    • 可伸缩性:支持消息集群,多台RabbitMQ服务器可以组成一个集群
    • 高可用性:RabbitMQ集群中的某个节点出现问题时队列任然可用
    • 支持多种协议
    • 支持多语言客户端
    • 提供良好的管理界面
    • 提供跟踪机制:如果消息出现异常,可以通过跟踪机制分析异常原因
    • 提供插件机制:可通过插件进行多方面扩展
  • RabbitMQ逻辑结构
    • 用户
    • 虚拟主机
    • 队列
      在这里插入图片描述

二、RabbitMQ安装及配置(Linux)

2.1 安装前准备

  • 如果之前安装过erlang,先删除
    yum remove erlang*
    
  • 安装C++编译环境
    # yum -y install make gcc gcc-c++
    yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson
    
  • 进入/usr/local/下载erlang和rabbitMQ
    # 下载erlang
    wget http://www.erlang.org/download/otp_src_20.1.tar.gz
     
    # 下载rabbitMQ
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.0/rabbitmq-server-generic-unix-3.7.0.tar.xz
    
  • 如果erlang下载很慢 可以在 https://erlang.org/download/otp_versions_tree.html中找对应版本
    在这里插入图片描述
  • 在/usr/local/新建erlang指定安装文件夹
    mkdir erlang
    

2.2 安装erlang

  • 解压erlang安装包

    tar -xvf otp_src_20.1.tar.gz
    
  • 进入解压文件夹

    cd otp_src_20.1
    
  • 指定安装目录及安装配置(需要先安装并配置JDK)

    # erlang指定安装在/usr/local/erlang目录 
    ./configure --prefix=/usr/local/erlang --enable-smp-support --enable-threads --enable-sctp --enable-kernel-poll --enable-hipe --with-ssl --without-javac
    
  • 编译与安装

    make && make install
    
  • 配置erlang环境变量

    vim /etc/profile
    
  • 将 export PATH=$PATH:/usr/local/erlang/bin 添加到文件末尾[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clQJaSMI-1643185294925)(https://note.youdao.com/yws/res/17246/A24DC7227FE4411FBBE4E9F6C580B1D4)]

  • 重新加载profile文件

    source /etc/profile
    

2.3 安装RabbitMQ

  • 回到/usr/local/解压RabbitMQ安装包
    • 由于下载的安装包为xz文件,先将xz解压为tar
    xz -d rabbitmq-server-generic-unix-3.7.0.tar.xz
    
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WAuqlZex-1643185294928)(https://note.youdao.com/yws/res/17334/BB3C6B67CD474F448306D19F3B4DE81E)]
    • 再解压缩tar文件
    tar -xvf rabbitmq-server-generic-unix-3.7.0.tar
    
  • 启动RabbitMQ
    • 进入到解压的RabbitMQ的sbin目录
    cd rabbitmq_server-3.7.0/sbin
    
    • 启动
    ./rabbitmq-server
    
    • 查看进程
    lsof -i:5672
    

2.4 启动管理界面

  • 启动RabbitMQ的管理系统插件(在rabbitmq_server-3.7.0/sbin目录)
    ./rabbitmq-plugins enable rabbitmq_management
    
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MCqWB9Hu-1643185294929)(https://note.youdao.com/yws/res/17340/06FA5C1561F644B9A8EFE11E2A98620E)]
  • 关闭防火墙(CentOS7)
    #关闭防火墙 
    systemctl stop firewalld
    #开机禁用 
    systemctl disable firewalld
    #查看状态
    systemctl status firewalld
    
    在这里插入图片描述
  • 云服务器放行端口15672(管理界面端口号)5672(RabbitMQ端口号)
  • 管理系统登录:访问 http://47.96.11.185:15672/
    在这里插入图片描述

三、RabbitMQ用户管理

RabbitMQ默认提供了⼀个guests账号,但是此账号不能⽤作远程登录,也就是不能在管理系统的登录;我们可以创建⼀个新的账号并授予响应的管理权限来实现远程登录

  • 在linux中使用命令行创建用户
## 进⼊到rabbit_mq的sbin⽬录
cd /usr/local/rabbitmq_server-3.7.0/sbin

## 新增⽤户
./rabbitmqctl add_user ytao admin123
  • 设置用户级别
## ⽤户级别:
## 1.administrator 可以登录控制台、查看所有信息、可以对RabbitMQ进⾏管理
## 2.monitoring 监控者 登录控制台、查看所有信息
## 3.policymaker 策略制定者 登录控制台、指定策略
## 4.managment 普通管理员 登录控制台

./rabbitmqctl set_user_tags ytao administrator
  • 然后就可以用此账号密码登录RabbitMQ管理界面访问
  • 新增用户
    在这里插入图片描述
  • 新建虚拟主机
    在这里插入图片描述
  • 用户绑定虚拟主机
    在这里插入图片描述

四、RabbitMQ工作方式

消息通信是由两个角色完成:消息生产者(producer)和 消息消费者(Consumer)
队列中的消息只能被消费一次

4.1 简单模式

⼀个队列只有⼀个消费者
⽣产者将消息发送到队列,消费者从队列取出数据

在这里插入图片描述

4.2 工作模式

多个消费者监听同⼀个队列,但多个消费者中只有⼀个消费者会成功的消费消息

在这里插入图片描述

4.3 订阅模式

⼀个交换机绑定多个消息队列,每个消息队列有⼀个消费者监听,消息⽣产者发送的消息可以被每⼀个消费者接收

在这里插入图片描述

4.4 路由模式

⼀个交换机绑定多个消息队列,每个消息队列都有自己唯⼀的key,每个消息队列有⼀个消费者监听,消息生成者可以通过key指定将某消息发送到某队列

在这里插入图片描述

五、RabbitMQ交换机和队列管理

5.1 基于管理系统

5.1.1 创建队列

在这里插入图片描述

5.1.2 创建交换机

在这里插入图片描述

5.1.3 交换机绑定队列

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

5.2 基于SpringBoot

@Configuration
public class RabbitMQConfiguration {
   

	 //声明队列
	 @Bean
	 public Queue queue9(){
   
	 Queue queue9 = new Queue("queue9");
	 //设置队列属性
	 return queue9;
	 }
	 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值