目录
一、什么是消息队列
二、什么是RabbitMQ
三、安装RabbitMQ
3.1 安装Erlang环境
3.2 安装RabbitMQ
3.3 打开服务管理界面
3.4 常用命令
四、Python示例代码
4.1 发送数据
4.2 接收数据
一、什么是消息队列
消息队列(Message Queue)是一种用于在应用程序之间传递消息的通信方式,消息队列允许应用程序异步地发送和接收消息,并且不需要直接连接到对方。
消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串也可以更复杂,可能包含嵌入对象。
队列(Queue)可以说是一个数据结构,可以存储数据,先进先出。
二、什么是RabbitMQ
一款基于AMQP(高级消息队列协议)用于软件之间通信的中间件,由Rabbit科技有限公司开发,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
Rabbitmq四大核心:生产者、消费者、队列、交换机
AMQP协议是一种二进制协议,它定义了一组规则和标准,以确保消息可以在不同的应用程序和平台之间传递和解释。AMQP协议包含四个核心组件:消息、交换机、队列、绑定
三、安装RabbitMQ
3.1 安装Erlang环境
先安装Erlang环境,下载地址:Downloads - Erlang/OTP。下载Erlang环境时需注意与Rabbitmq版本匹配,版本对应关系查询网址:Erlang Version Requirements | RabbitMQ
这里下载的Erlang版本为“26.2.5”
下载后是一个可执行文件
以管理员身份运行,然后一直点击“Next”
安装好后需要在环境变量中设置一下:
3.2 安装RabbitMQ
根据版本对应关系, “26.2.x”版本的Erlang对应3.13版本的RabbitMQ
下载地址:Installing on Windows | RabbitMQ
下载后直接安装(不要安装在包含中文和空格的目录下!安装后window服务中就存在rabbitMQ了,并且是启动状态。)
3.3 打开服务管理界面
RabbitMQ安装完成后,执行以下步骤打开服务管理界面
首先找到RabbitMQ安装目录下的“sbin”文件夹
双击rabbitmq-server.bat来重启服务
如果遇到端口占用情况可以尝试找到占用端口的应用程序的PID,然后杀死
浏览器输入http://127.0.0.1:15672 , 即可看到rabbitmq管理界面的登陆页
输入用户名和密码登录,默认都为guest。登陆之后我们可以添加一个用户名和密码
3.4 常用命令
命令需要先cd到“xxx\rabbitmq_server-3.13.2\sbin”路径下再输
(1)启动/停止
rabbitmq-service start/stop
(2)设置用户密码
rabbitmqctl add_user chaochao 123456
(3)设置用户为administrator角色
rabbitmqctl set_user_tags chaochao administrator
四、Python示例代码
4.1 发送数据
如果服务端没有设置密码,使用如下代码即可发送数据
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) # 创建连接
channel = connection.channel() # 创建channel
channel.queue_declare(queue="test_q1") # 申明队列
# 往队列发送数据
channel.basic_publish(
exchange='',
routing_key='test_q1', # 消息队列名称
body='Hello World!' # 消息内容
)
connection.close() # 关闭连接
如果有密码,则需要添加如下部分:
import pika
credentials = pika.PlainCredentials("chaochao","123456")
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',credentials=credentials)) # 创建连接
channel = connection.channel() # 创建channel
channel.queue_declare(queue="test_q1") # 申明队列
# 往队列发送数据
channel.basic_publish(
exchange='',
routing_key='test_q1', # 消息队列名称
body='Hello World!' # 消息内容
)
connection.close() # 关闭连接
如果报错“pika.exceptions.ProbableAccessDeniedError: ConnectionClosedByBroker: (530) "NOT_ALLOWED - access to vhost '/' refused for user 'chaochao'"”如下:
表示服务未对该用户开放相关的权限,如 Virtual Host权限
我们可以输入如下命令设置用户拥有全部权限:
rabbitmqctl set_permissions -p "/" chaochao ".*" ".*" ".*"
设置过后就可以成功发送。
4.2 接收数据
import pika
credentials = pika.PlainCredentials("chaochao","123456")
connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1',credentials=credentials)) # 创建连接
channel = connection.channel() # 创建channel
channel.queue_declare(queue="test_q1") # 申明队列
def callback(ch, method, properties, body): # 有消息进队列就执行该函数
print("Received: %r" % body)
channel.basic_consume(
queue="test_q1",
on_message_callback = callback,
auto_ack=True
)
channel.start_consuming()
参考视频:
https://www.bilibili.com/video/BV1Am4y1z7Tu/?p=2&spm_id_from=pageDriver&vd_source=36a3e35639c44bb339f59760641390a8
03 rabbmitMQ消息安全之ack_哔哩哔哩_bilibili
参考文章:
RabbitMQ使用教程-CSDN博客