RabbittMQ的使用
概述
- RabbitMQ 是一个消息中间件:它接收并转发消息。
- 我们可以将 RabbitMQ 当做是一个快递站点,当我们要发送一个包裹的时候,我们可以将包裹送到快递站(目前,也支持上门取件),快递员最终会把快递送到收件人哪里,按照这种逻辑 RabbitMQ 是一个快递站。
- RabbitMQ 和快递站的主要区别在于:RabbitMQ 不处理快件而是
接收、存储和转发消息数据
。
四大核心概念
生产者:产生数据发送消息的程序。
交换机:交换机是 RabbitMQ 中非常重要的一个组件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,或者将消息丢失,这是由交换机的类型决定的。
队列:队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但是它们只能存储在队列中。
队列仅仅受到主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区
。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列中接收数据。消费者:消费者就是等待接收消息的程序。
注意:
① 生产者、消费者以及消息中间件很多时候并不在同一台机器上。
② 同一个应用程序既可以是生产者也可以是消费者。
RabbitMQ 的工作模式
RabbitMQ 的工作原理
Broker
:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker 。Virtual Host
:出于多租户和安全因素的设计,将 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 的概念。当多个不同的用户使用同一个 RabbitMQ Server 提供服务的时候,可以划分多个 vhost ,每个用户在自己的 vhost 创建 exchange 、queue 等。Connection
:生产者、消费者和 MQ 之间的 TCP 连接。Channel
:如果每一次访问 RabbitMQ 都需要建立一次 Connection ,在消息量大的时候建立 TCP Connection 的开销将会十分巨大,效率也比较低。Channel 是在 Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP 的 method 包含了 channel 的 id 帮助客户端和 Message Broker 识别 Channel,所以 Channel 之间是完全隔离的。换言之,Channel 作为轻量级的 Connection 极大的减少了操作系统建立 TCP Connection 的开销。Exchange
:message 到达 Broker 的第一站,根据分发规则,匹配查询表中的 routing key ,分发消息到对应的 queue 中。Queue
:消息最终存放的地方,以便消费者进行消费。Binding
:Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key ,Binding 信息被保存在 Exchange 的查询表中,用于 message 的分发依据。
安装RabbitMQ
- 安装是基于 CentOS 7 ,并关闭防火墙。
- Downloading and Installing RabbitMQ — RabbitMQ
安装 Erlang
下载
1
wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-22.3.1-1.el7.x86_64.rpm/download.rpm
安装
1
rpm -ivh erlang-22.3.1-1.el7.x86_64.rpm
安装 RabbitMQ
下载安装包
1
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.8/rabbitmq-server-3.8.8-1.el7.noarch.rpm
安装依赖:
1
yum -y install socat
安装:
1
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
开启管理界面:
1
rabbitmq-plugins enable rabbitmq_management
配置
配置远程可以使用 guest 登录 RabbitMQ
1
2# vim /etc/rabbitmq/rabbitmq.conf
loopback_users = none启动 RabbitMQ :
1
2
3
4systemctl start rabbitmq-server
systemctl enable rabbitmq-server
systemctl stop firewalld
systemctl disable firewalld
访问
访问地址:http://node1:15672/ 。
- 账号:guest 。
- 密码:guest 。
添加用户
添加用户:
1
rabbitmqctl add_user admin 123456
设置角色:
1
rabbitmqctl set_user_tags admin administrator
赋予权限:
1
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
查看当前系统中的用户:
1
rabbitmqctl list_users
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 凉月の博客!
评论