RabbitMQ
RabbitMQ简介
是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。
消息队列:是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。
消息队列的主要作用:异步、解耦、削峰。
https://www.rabbitmq.com/networking.html RabbitMQ的服务文档信息
RabbitMQ的安装
一、Linux环境下
- 下载:https://www.rabbitmq.com/download.html
- 因为rabbitmq是基于erlang语言开发的,需要安装环境 ,查看环境的版本 https://www.rabbitmq.com/which-erlang.html
- erlang的下载 https://www.erlang-solutions.com/downloads/
- yum install -y erlang 安装erlang
- 安装socat yum install -y socat
- 安装rabbitmq yum install -y rabbitmq-serve
常用命令:systemctl start rabbitmq-serve 启动服务
systemctl enable rabbitmq-serve 开机自启动
7.安装图形化界面 rabbitmq-plugins enable rabbitmq_management
8.rabbitmq授权账户和密码 rabbitmqctl add_user {username} {passwd}
rabbitmqctl add_user root root123
-
设置用户角色 rabbitmqctl set_user_tags {username} {tag}
rabbitmqctl set_user_tags root administrator
docker run -d --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management
RabbitMQ的工作模式
直连模式:一个队列只被一个consumer消费
工作模式:一个队列被多个consumer消费 (包括轮训模式(将channel.basicConsume(…, true, …)autoAck设为true)、公平模式(能者多劳,将autoAck设置为false))
发布订阅模式:Fanout,采用广播的机制
路由模式:direct,采用直连的形式
topic模式:可以通过routingkey将消息发送给复合定义的队列。
参数模式:header
RabbitMQ中各个组件
Producer生产消息(消息分为头和体,头中有许多的信息),发送给服务器端的Exchange
Exchange收到消息,根据routing key,将消息转发给匹配的Queue
Exchange与Queue之间是通过binding来进行绑定的
Queue收到消息,将消息发送给订阅者Consumer
Producer收到消息,发送ACK给队列确认收到消息
Queue收到ACK,删除队列中缓存的此条消息
Connection 连接通道
Virtual Host 虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制
Producer、Consumer与代理服务器(RabbitMQ)之间建立的是长链接,并且在连接中开辟出一个个的通道,来进行消息的传递。可以通过一个个的通道来确定某个服务是否还健在。
RabbitMQ的工作流程图
AMQP协议
即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端中间件不同产品,不同的开发语言等条件的限制,而R