RabbitMQ
介绍
- RabbitMQ是一个基于AMQP的开源消息管理系统
- 可以作为消息中间件
- 支持主流操作系统:Linux、Windows、MacOX等。
- 多种开发语言支持,java、python、ruby、PHP、node.js等。
RabbitMQ基本工作流程
-
**Broker:**是一个还是RabbitMQ集群 -
虚拟主机: Broker由一个交换机(Exchange)和一个消息队列(Queue)组成,两者结合起来称为一个虚拟主机(Virtual Host),一个rabbitMQ有7个交换机 -
**绑定:**队列必须绑定到交换才能接收消息 -
Channel: Channel,复用连接中独立的双向数据流通道。通道是在真实的 TCP 连接中建立的虚拟连接。AMQP 命令通过通信发送。无论是发布消息、订阅、排队还是接收消息,这些动作都是通过通道完成的。由于操作系统建立和销毁 TCP 的开销很大,因此引入了通道的概念来重用 TCP 连接。 -
**发送消息:**发布者(publisher)通过连接通道(Channel)将消息发送到交换(Exchange),交换将消息分发到消息队列(队列可以是一个或多个) -
**接收消息:**接收者(Consumer)通过连接通道(Channel)连接到消息队列,获取消息 -
补充:
-
为什么要有渠道:
- 每次连接完成都会断开连接去取数据,无法同时取多个队列的消息,也很消耗性能
- 一个链接中可以有多个通道,不同的通道可以通过不同的队列获取不同的消息
- 通道使用完毕后,关闭通道即可
-
消息由消息头和消息体组成。
- 消息体是不透明的,消息头由一系列可选属性组成,例如routing-key(路由密钥)、priority(相对于其他消息的优先级)、delivery-mode(指出消息可能需要持久化存储) ) 等待
- 并不是说交换机和路由连接成功,队列就可以拿到数据了。该队列只能根据routing-key(路由密钥)接收添加产品的消息,其他队列可以接收和存储修改和删除。
-
Broker 中有 6 种消息传递模式。
RabbitMQ常用命令和接口
-
常用命令
- 启动服务:systemctl start rabbitmq-server.service
- 停止服务:systemctl stop rabbitmq-server.service
- 查看服务状态:systemctl status rabbitmq-server.service
- 重启服务:systemctl restart rabbitmq-server.service
-
管理界面
- 安装rabbitmq时需要关闭防火墙:systemctl stop firewalld.service
- 启动后台管理界面:rabbitmq-plugins enable rabbitmq-management
- 访问页面:http://127.0.0.1:15367/默认不允许用户远程连接,不支持指定ip登录
- 默认用户名和密码:guest
-
账户管理命令
- 添加管理员账号密码:rabbitmqctl adduser admin admin
- 分配账号角色:rabbitmqctl set_user_tags admin adminstrator(设置管理员权限,这个账号可以远程登录,其他后台监控权限也可以在页面添加)
- 更改密码:rabbitmqctl change_password admin 123456
- 查看用户列表:rabbitmqctl list_users
-
端口:
- 5672:Rabbitmq 的编程语言客户端连接端口
- 15672:rabbitmq 管理接口端口
- 25672:rabbitmq 集群端口
RabbitMQ的优缺点
-
RabbitMQ的优势
-
RabbitMQ 的缺点
RabbitMQ应用场景
-
异步处理
- 比如用户注册时的确认邮件和短信交给rabbitMQ异步处理
-
应用解耦
- 例如,发送和接收消息都可以使用消息队列,它具有一定的缓冲功能
-
流量高峰
- 一般用于秒杀活动,可以控制用户数量,也可以减少流量
-
日志处理
- 分别存储info、warning、error等不同的记录
常见的MQ产品
- ActiveMQ:基于JMS
- RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
- RocketMQ:基于JMS,阿里巴巴产品,目前移交给Apache基金会
- Kafka:分布式消息系统,高吞吐量,处理日志,Scala和java编写
|