rabbitMQ操作

〇、rabbitMQ官方文档

  https://www.rabbitmq.com/tutorials/tutorial-one-python.html

一、RabbitMQ 原理简介

1. RabbitMQ 角色

  • 生产者:消息的创建者,负责创建和推送数据到消息服务器;
  • 消费者:消息的接收方,用于处理数据和确认消息;
  • 代理:就是RabbitMQ本身,负责消息的传递。

2. 连接 RabbitMQ 方式

  • 客户端通过 TCP 连接到 RabbitMQ Server。
  • 连接成功后 RabbitMQ 会创建一个 AMQP 信道。
  • 信道是创建在 TCP 上的虚拟连接,AMQP 命令都是通过信道发送出去的,每个信道都会有一个唯一的 ID,不论是发布消息,订阅队列或者介绍消息都是通过信道完成的。

3. RabbitMQ 中的关键词

  • Producer (生产者):消息生产者
  • Consumer(消费者):消息的消费者
  • Connection(连接):就是一个TCP的连接,Producer 和 Consumer 都是通过 TCP 连接到 RabbitMQ Server 的。
  • Channel(信道):他是虚拟连接,他建立在 Connection 的 TCP 连接中。也就是说他是消息推送使用的通道;
  • Exchange(交换器):是生产者发布消息的通道,接收生产者消息并将消息路由到消息队列;
  • Queue(队列):是消费者接受消息的通道,用于存储生产者的消息;
  • RoutingKey(路由键):用于把生成者的数据分配到交换器上;
  • BindingKey(绑定键):用于把交换器的消息绑定到队列上;

4. RabbitMQ 虚拟主机

  • 虚拟主机概念:虚拟主机是 RabbitMQ 创建的虚拟消息服务器。为了在一个 RabbitMQ 上实现多用户隔离。为此提供了一个虚拟主机(virtual hosts - vhosts)的概念。
  • 虚拟主机的操作
命令说明参数
rabbitmqctl list_vhosts 列举所有虚拟主机  
rabbitmqctl add_vhost <vhost_name> 添加虚拟主机 vhost_name 创开虚拟主机的名称
rabbitmqctl delete_vhost <vhost_name> 删除虚拟主机 vhost_name 删除虚拟主机的名称
rabbitmqctl add_user <username> <password> 添加用户 username 用户名
password 密码
rabbitmqctl set_user_tags <username> <tag> 设置用户标签 username 用户名
tag 标签 如:administrator, monitoring, management
rabbitmqctl set_permissions [-p <vhost>] <user> <conf> <write> <read> 设置权限(如:队列交换机的创建和删除、发布消息、读取消息等) user 用户名
conf 正则表达式匹配置资源能够被用户访问。
write 正则表达式匹配置资源能够被用户读。
read 正则表达式匹配置资源能够该用户访问
示例:rabbitmqctl set_permissions ceshi ".*" ".*" ".*" 给 ceshi 用户最高权限

5. RabbitMQ 消息持久化

  • RabbitMQ 会将持久化的消息写入磁盘上的持久化日志文件,等消息被消费之后,RabbitMQ 会把这条消息标识为等待垃圾回收。
  • RabbitMQ 默认情况下是关闭消息持久化的。需要在创建队列的时候设置。
  • RabbitMQ 消息持久化需要设置:1.队列持久化(生产者、消费者都需要);2.消息持久化;

  设置如下:

  • 队列持久化 durable=True 消息的生产者和接收者都需要设置队列持久化
channel.queue_declare(queue='task_queue', durable=True)  # 声明队列,durable=True队列持久化
  • 消息持久化 delivery_mode=2
channel.basic_publish(
    exchange='',
    routing_key='task_queue',
    body=message,
    properties=pika.BasicProperties(
    delivery_mode=2,  # 2消息持久化,1非持久化rabbitMQ重启后消息丢失
    ))  # 发送消息
  • 消息持久化的缺点:因为要写入硬盘要比写入内存性能较低很多,从而降低了服务器的吞吐量。

6. rabbitMQ confirm机制

原文地址:https://www.cnblogs.com/aaron-agu/p/12294028.html