RabbitMQ从入门到精通(一)

一、什么是RabbitMQ?

1.1简介

RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件。

AMQP协议(http://www.amqp.org),即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

RabbitMQ最早是起源于金融系统,它的性能及稳定性都非常的好。

1.2RabbitMQ相关网址

官网:RabbitMQ: One broker to queue them all | RabbitMQ 

Github:RabbitMQ · GitHub

1.3消息中间件

简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。

消息中间件一般有三个主要角色:生产者、消费者、消息代理(消息队列、消息服务器)。

工作流程主要是生产者发送消息到消息服务器然后消费者从消息代理(消息队列)中获取数据并进行处理。

1.4常用的消息中间件

  • RabbitMQ
  • kafka(大数据领域)
  • RocketMQ(阿里巴巴开源)献给Apache组织,使用java开发的
  • pulsar

 二、MQ的应用场景

2.1异步处理

下订单业务

同步:下订单-->加积分-->发红包-->发手机短信-->发优惠券

异步:下订单--->向MQ 发消息-->积分系统,红包系统,手机短信系统,优惠券系统接收消息

同步是阻塞的(会造成等待),异步是非阻塞的(不会等待)。

大流量高并发请求、批量数据传递,就可以采用异步处理,提升系统吞吐量。

2.2系统解耦

多个系统之间,不需要直接交互,通过消息进行业务流转。

2.3流量削峰

高负载请求/任务的缓冲处理

2.4日志处理

主要是用kafka这个服务器来做。

日志处理是指将消息队列用于在日志处理中,比如用Kafka解决大量日志传输的问题;

ELK(Elastic search+Logstash+Kibana) 日志处理解决方案:

loger.error(......) -->Logstash收集消息--> 发送消息的kafka --> Elastic search(es) -->Kibana(可视化)================>ELK日志处理平台

三、RabbitMQ运行环境搭建

RabbitMQ是使用Erlang语言开发的,所以要先下载安装Erlang

3.1Erlang及RabbitMQ安装版本的选择

下载时一定要注意版本兼容问题

版本兼容说明地址:Erlang Version Requirements | RabbitMQ

3.2下载Erlang

Erlang官网:Index - Erlang/OTP

Linux下载命令如下:

​
wget https://github.com/erlang/otp/releases/download/OTP-25.2.3/otp_src_25.2.3.tar.gz

说明:wget 是Linux命令,可以用来下载软件

如果wget没安装可以先安装一下wget

yum install wget

3.3安装Erlang

3.3.1先安装Erlang的Linux依赖库
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel

说明:yum -y install  安装linux的一些依赖库的命令 ,-y表示自动确认;

3.3.2解压Erlang安装包文件
tar -xvzf otp_src_25.2.3.tar.gz
3.3.3配置

切换到解压目录下

cd otp_src_25.2.3

运行配置命令

./configure
3.3.4编译
make
3.3.5安装
make install

安装好了Erlang后可以将解压的目录删除:

# 删除解压目录,-r代表递归删除 -f 强制删除,强制删除就不会提示
rm -rf otp_src_25.2.3
3.3.6验证Erlang是否安装成功
# 终端输入erl,如果进入了编程命令行则表示安装成功
erl
#然后按ctrl + z 退出编程命令行

3.4下载RabbitMQ

从RabbitMQ官网找到下载链接:https://www.rabbitmq.com

Linux:下载3.11.15

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.15/rabbitmq-server-generic-unix-3.11.15.tar.xz

generic 是通用的意思,这个版本也就是通用的unix版本

3.5安装RabbitMQ

解压RabbitMQ的压缩包,即安装完成,无需再编译

tar -xvf rabbitmq-server-generic-unix-3.11.15.tar.xz  -C  /usr/local/

说明 -C 是指定解压目录,如果不指定会解压到当前目录

到此,rabbitmq就安装好了。

四、启动及停止RabbitMQ

4.1启动RabbitMQ

切换到安装目录的sbin目录下:

#启动
./rabbitmq-server  -detached

说明:-detached 选项为后台启动运行rabbitmq;不加该参数表示前台启动;

rabbitmq的运行日志存放在rabbitmq安装目录的var目录下;

现在的目录是:/usr/local/rabbitmq_server-3.11.15/var/log/rabbitmq

4.2查看RabbitMQ的状态

切换到sbin目录下执行:

./rabbitmqctl -n rabbit status

说明:-n rabbit 是指定节点名称为rabbit,目前只有一个节点,节点名默认为rabbit

 注意:此处-n rabbit 也可以省略

4.3停止RabbitMQ

切换到sbin目录下执行:

./rabbitmqctl shutdown

4.4配置path环境变量

vi /etc/profile

将以下代码加入进去 

RABBIT_HOME=/usr/local/rabbitmq_server-3.11.15
PATH=$PATH:$RABBIT_HOME/sbin

export RABBIT_HOME PATH

编辑后保存退出(:wq)

:wq

刷新环境变量,命令如下

source /etc/profile

配置环境变量后就可以在任何目录下使用rabbitmq下sbin目录中的命令了

五、RabbitMQ的管理命令

rabbitmqctl  是一个管理命令,可以管理rabbitmq的很多操作。

rabbitmqctl help可以查看一下有哪些操作

查看具体子命令 可以使用 rabbitmqctl help 子命令名称

5.1用户管理

用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。

这些操作都是通过rabbitmqctl管理命令来实现完成。

查看帮助:

rabbitmqctl help add_user

查看当前用户列表

rabbitmqctl list_users

新增一个用户

语法:rabbitmqctl add_user Username  Password
示例: rabbitmqctl add_user root 123456789

5.2设置用户角色

rabbitmqctl set_user_tags  User  Tag
示例:rabbitmqctl set_user_tags root administrator

说明:此处设置admin用户的角色为管理员角色

5.3设置用户权限

查看用户权限

rabbitmqctl list_permissions

设置用户权限

rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

说明:此操作是设置root用户拥有操作虚拟主机/下的所有权限

参考页面:Authentication, Authorisation, Access Control | RabbitMQ

六、Web管理后台

Rabbitmq有一个Web管理后台,这个管理后台是以插件的方式提供的,启动后台Web管理功能

6.1启动管理后台

# 查看rabbitmq 的插件列表
rabbitmq-plugins list
#启用插件rabbitmq_management
rabbitmq-plugins enable rabbitmq_management 
#禁用插件rabbitmq_management
rabbitmq-plugins disable rabbitmq_management

6.2防火墙操作

# 检查防火墙状态
systemctl status firewalld
# 关闭防火墙,Linux重启之后会失效
systemctl stop firewalld
# 防火墙置为不可用,Linux重启后,防火墙服务不自动启动,依然是不可用
systemctl disable firewalld

注意生产环境禁止这样做,生产环境只能开放某些端口,比如web管理界面只需开放15672端口

#开放15672端口
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
#刷新
sudo firewall-cmd --reload
#查看是否成功开放
sudo firewall-cmd --list-all

6.3访问Web管理后台

http://你的ip地址:15672 

用户名/密码为我们上面创建的root/123456789

备注:如果使用默认用户guest、密码guest登录,会提示User can only log in via localhost

说明:guest用户只能从localhost本机(虚拟机)登录,所以不要使用该用户。

6.4通过Web页面创建虚拟主机

新建虚拟主机spike,参见下图

建完后如下图

七、RabbitMQ工作模型

 

比喻:rabbitmq和mysql作比喻:

  • broker 相当于mysql服务器
  • virtual host相当于数据库(一个mysql服务器可以有多个数据库,一台broker可以有多个虚拟主机)
  • queue相当于表(一个数据库有多张表,一个虚拟主机有多个队列)
  • 消息相当于记录(一张表中有多条记录,一个队列中有多条消息)

消息队列有三个核心要素: 消息生产者消息队列消息消费者

生产者(Producer):发送消息的应用;(java程序,也可能是别的语言写的程序)

消费者(Consumer):接收消息的应用;(java程序,也可能是别的语言写的程序)

代理(Broker):就是消息服务器,RabbitMQ Server就是Message Broker;

连接(Connection):连接RabbitMQ服务器的TCP长连接;

信道(Channel):连接中的一个虚拟通道,消息队列发送或者接收消息时,都是通过信道进行的;

虚拟主机(Virtual host):一个虚拟分组,在代码中就是一个字符串,当多个不同的用户使用同一个RabbitMQ服务时,可以划分出多个Virtual Host,每个用户在自己的Virtual Host创建exchange/queue等;(分类比较清晰、相互隔离)

交换机(Exchange):交换机负责从生产者接收消息,并根据交换机类型分发到对应的消息队列中,起到一个路由的作用;

路由键(Routing Key):交换机根据路由键来决定消息分发到哪个队列,路由键是消息的目的地址;

绑定(Binding):绑定是队列和交换机的一个关联连接(关联关系);

队列(Queue):存储消息的缓存;

消息(Message):由生产者通过RabbitMQ发送给消费者的信息;(消息可以为任何数据,字符串,user对象,json串,图片,视频等等)

接下来的内容请看RabbitMQ从入门到精通(二)👍👍👍

  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RabbitMQ是一个开源的消息中间件,它实现了高级消息队列协议(AMQP)并提供可靠的消息传递机制。下面是RabbitMQ从入门到精通的介绍: 1. RabbitMQ基础概念: - 消息:在RabbitMQ中,消息是指要传递的数据单元。 - 队列:消息在RabbitMQ中存储的地方,类似于一个邮箱。 - 交换机:接收生产者发送的消息,并将消息路由到一个或多个队列。 - 绑定:用于将交换机和队列关联起来,定义了消息如何从交换机路由到队列。 - 路由键:用于交换机将消息路由到队列的规则。 2. RabbitMQ工作模式: - 简单模式:一个生产者向一个队列发送消息,一个消费者从该队列接收消息。 - 工作队列模式:一个生产者向一个队列发送消息,多个消费者从该队列接收消息。 - 发布/订阅模式:一个生产者发送消息到交换机,多个消费者绑定到该交换机并接收消息。 - 路由模式:一个生产者发送消息到交换机,并指定路由键,多个消费者根据不同的路由键接收消息。 - 主题模式:一个生产者发送消息到交换机,并指定主题,多个消费者根据不同的主题接收消息。 3. RabbitMQ高级特性: - 消息确认机制:生产者发送消息后,可以等待RabbitMQ的确认,确保消息已经被正确接收。 - 消息持久化:将消息存储到磁盘上,即使RabbitMQ服务器重启,消息也不会丢失。 - 消息优先级:可以为消息设置优先级,确保重要的消息被优先处理。 - 死信队列:当消息无法被消费时,可以将其发送到死信队列进行处理。 - 集群和高可用性:通过搭建RabbitMQ集群实现高可用性和负载均衡。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值