https://www.cnblogs.com/-hz01/p/17985502
Python有多种插件都支持RabbitMQ,本文介绍的是RabbitMQ推荐的Pika插件。使用pip直接安装即可 pip install pika
。
一、RabbitMQ简介
1. MQ简介
MQ(Message Queue,消息队列),是一个在消息传输过程中保存消息的容器,多用在分布式系统之间进行通信。
MQ优势
- 应用解耦:提高系统容错性和可维护性。
- 异步提速:提升用户体验和系统吞吐量,MQ可短时间接收和保存大量消息(请求),其他服务可以异步地进行消息的消费。
- 削峰填谷:提高系统稳定性,当MQ中保存了大量消息(请求)后,其他服务就可以按照自身的需要从容地对MQ中的消息进行消费,而不必直接去处理大量请求(短时间内的大量请求在横轴为时间、纵轴为请求量的图上就是峰顶)。
MQ劣势
- 如果使用MQ的话,MQ就属于系统引入的外部依赖,一旦MQ宕机,就会对业务造成影响。
2. RabbitMQ简介
AMQP(Advanced Message Queuing Protocol,高级消息队列协议),是一个网络协议,同时也是一个应用协议的开放标准,专为面向消息的中间件而设计。RabbitMQ是基于AMQP并使用Erlang语言开发的消息中间件,在安装RabbitMQ时如果没有安装Erlang的话,需要根据提示下载并安装Erlang。当前有多种语言都有对应的插件来支持RabbitMQ的使用,包括Java、Python、Ruby等,本文主要介绍通过Python操作RabbitMQ。
RabbitMQ相关概念
- Broker:接收和分发消息的应用,RabbitMQ Server就是Message Broker。
- Virtual host:出于多租户和安全因素的设计,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念,当多个不同的用户使用同一个RabbitMQ Server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。
- Connection:publisher/consumer和broker之间的TCP连接。
- Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销都将是巨大的,效率也是非常低的。Channel是在Connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread会创建单独的Channel进行通信,AMQP的method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection,极大减少了操作系统建立TCP连接的开销。
相关术语
- producer:生产者,向队列中发送消息的程序。(在图表中通常使用P表示)
- queue:队列,用于存储消息,定义在RabbitMQ内部,queue本质上是一个消息缓存buffer,生产者可以往里发送消息,消费者也可以从里面获取消息。(在图表中通常使用Q表示)
- consumer:消费者,等待并从消息队列中获取消息的程序。(在图表中通常使用C表示)
- exchange:交换机,用于将producer发送来的消息发送到queue,事实上,producer是不能直接将message发送到queue,必须先发送到exchange,再由exchange发送到queue。(在图表中通常使用X表示)
- 注:生产者和消费者可能在不同的程序或主机中,当然也有可能一个程序有可能既是生产者,也是消费者。
Windows上RabbitMQ安装
在 https://rabbitmq.com/install-windows.html 上找到 Direct Downloads
下的exe安装文件并下载即可,安装过程中可能会提示你下载Erlang,按提示打开网站下载安装即可 https://www.erlang.org/downloads ,下载文件如 OTP 24.0 Windows 64-bit Binary File
。 都安装好后执行以下命令创建用户:
- 在命令窗口cd到RabbitMQ安装目录的
RabbitMQ Server\rabbitmq_server-3.8.17\sbin
。 - 安装RabbitMQ网页插件:
rabbitmq-plugins.bat enable rabbitmq_management
。 - 新建用户:
rabbitmqctl.bat add_user admin 123456
。(此处用户名和密码自己设置即可) - 设置管理员:
rabbitmqctl.bat set_user_tags admin administrator
。 (将刚才新建的用户设置为管理员身份) - 设置用户权限:
rabbitmqctl.bat set_permissions -p / dj123 “." ".” “.*”
。 - 停止和启动RabbitMQ服务:
net stop RabbitMQ && net start RabbitMQ
。(安装RabbitMQ后会自动启动服务,所以这一步也可以不用执行) - 使用网页插件查看RabbitMQ相关信息:直接访问
http://localhost:15672/
,并输入刚才创建的用户和密码即可。(这一步正常访问网页,则表示RabbitMQ安装成功了) - 注:RabbitMQ安装成功后,就可以使用Python程序(或其他语言程序)通过RabbitMQ服务发送和接收消息了。