目录
RabbitMQ简介
MQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先入先出,只不过队列中存放的内容是消息(message) ⽽已. 消息可以⾮常简单,⽐如只包含⽂本字符串, JSON等,也可以很复杂, 比如内嵌对象.
MQ主要⼯作是接收并转发消息, 在不同的应⽤场景下可以展现不同的作⽤:
1. 异步解耦: 在业务流程中, ⼀些操作可能⾮常耗时, 但并不需要即时返回结果. 可以借助MQ把这些操作异步化, ⽐如 用户注册后发送注册短信或邮件通知, 可以作为异步任务处理, 而不必等待这些操作完成后才告知⽤⼾注册成功.
2. 流量削峰: 在访问量剧增的情况下, 应⽤仍然需要继续发挥作⽤, 但是这样的突发流量并不常⻅. 如果以能处理这类峰值为标准⽽投⼊资源,⽆疑是巨⼤的浪费. 使⽤MQ能够使关键组件⽀撑突发访问压⼒, 不会因为突发流量⽽崩溃. ⽐如秒杀或者促销活动, 可以使⽤MQ来控制流量, 将请求排队, 然后系统根据⾃⼰的处理能⼒逐步处理这些请求.
3. 消息分发: 当多个系统需要对同⼀数据做出响应时, 可以使⽤MQ进⾏消息分发. ⽐如⽀付成功后, ⽀付系统可以向MQ发送消息, 其他系统订阅该消息, ⽽⽆需轮询数据库。
RabbitMQ采⽤Erlang语⾔开发, MQ 功能⽐较完备, 且⼏乎⽀持所有主流语⾔,开源提供的界⾯也⾮常友好, 性能较好, 吞吐量能达到万级, 社区活跃度也⽐较⾼,⽐较适合中⼩型公司。
RabbitMQ环境部署
此次介绍的是Linux(Ubuntu)系统下的安装。
RabbitMq需要Erlang语⾔的⽀持,在安装rabbitMq之前需要安装erlang
#更新软件包
sudo apt-get update
#安装erlang
sudo apt-get install erlang
查看erlang版本
root@hcss-ecs-0bb1:~# erl
Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-
threads:1]
Eshell V10.6.4 (abort with ^G)
安装RabbitMQ
#更新软件包
sudo apt-get update
#安装rabbitmq
sudo apt-get install rabbitmq-server
#确认安装结果
systemctl status rabbitmq-server
确认安装结果
root@hcss-ecs-0bb1:~# systemctl status rabbitmq-server
安装RabbitMQ管理界⾯
root@hcss-ecs-0bb1:~# rabbitmq-plugins enable rabbitmq_management
启动服务
#启动rabbitmq
sudo service rabbitmq-server start
添加⽤⼾admin, 密码:admin
# rabbitmqctl add_user ${账号} ${密码}
rabbitmqctl add_user admin admin
给⽤⼾添加权限
#rabbitmqctl set_user_tags ${账号} ${⻆⾊名称}
rabbitmqctl set_user_tags admin administrator
注:RabbitMQ⽤⼾⻆⾊分为Administrator、Monitoring、Policymaker、Management、
Impersonator、None共六种⻆⾊:
1. Administrator 超级管理员,可登陆管理控制台(启⽤management plugin的情况下),可查看所
有的信息,并且可以对⽤⼾,策略(policy)进⾏操作
2. Monitoring 监控者,可登陆管理控制台(启⽤management plugin的情况下),同时可以查看
rabbitmq节点的相关信息(进程数,内存使⽤情况,磁盘使⽤情况等)。
3. Policymaker 策略制定者,可登陆管理控制台(启⽤management plugin的情况下),同时可以对
policy进⾏管理。但⽆法查看节点的相关信息.
4. Management 普通管理者,仅可登陆管理控制台(启⽤management plugin的情况下),⽆法看到
节点信息,也⽆法对策略进⾏管理.
5. Impersonator 模拟者,⽆法登录管理控制台。
6. None 其他⽤⼾,⽆法登陆管理控制台,通常就是普通的⽣产者和消费者。
停⽌RabbitMQ服务
sudo systemctl stop rabbitmq-server
卸载rabbitmq已安装的相关内容
sudo apt-get purge --auto-remove rabbitmq-server
工作流程
下面简单介绍RabbitMQ的工作流程:
RabbitMQ是⼀个消息中间件, 也是⼀个⽣产者消费者模型. 它负责接收, 存储并转发消息。Producer 就类似邮件发件⼈. Consumer 就是收件⼈, RabbitMQ就类似于邮局。
Producer和Consumer:
Producer: ⽣产者, 是RabbitMQ Server的客⼾端, 向RabbitMQ发送消息
Consumer: 消费者, 也是RabbitMQ Server的客⼾端, 从RabbitMQ接收消息
Broker:其实就是RabbitMQ Server, 主要是接收和收发消息
Connection和Channel:
Connection: 连接. 是客⼾端和RabbitMQ服务器之间的⼀个TCP连接. 这个连接是建⽴消息传递的基础, 它负责传输客⼾端和服务器之间的所有数据和控制信息。
Channel: 通道, 信道. Channel是在Connection之上的⼀个抽象层. 在 RabbitMQ 中, ⼀个TCP连接可以有多个Channel, 每个Channel 都是独⽴的虚拟连接. 消息的发送和接收都是基于 Channel的.
通道的主要作⽤是将消息的读写操作复⽤到同⼀个TCP连接上,这样可以减少建⽴和关闭连接的开销,提⾼性能。
Virtual host: 虚拟主机. 这是⼀个虚拟概念. 它为消息队列提供了⼀种逻辑上的隔离机制. 对于
RabbitMQ⽽⾔, ⼀个 BrokerServer 上可以存在多个 Virtual Host. 当多个不同的⽤⼾使⽤同⼀个
RabbitMQ Server 提供的服务时,可以虚拟划分出多个 vhost,每个⽤⼾在⾃⼰的 vhost 创建
exchange/queue 等。类似于Mysql的数据库。
Queue: 队列, 是RabbitMQ的内部对象, ⽤于存储消息。
Exchange: 交换机. message 到达 broker 的第⼀站, 它负责接收⽣产者发送的消息, 并根据特定的规则把这些消息路由到⼀个或多个Queue列中.
Exchange起到了消息路由的作⽤,它根据类型和规则来确定如何转发接收到的消息.
以上,关于RabbitMQ,希望对你有所帮助。