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机制
文章出处:http://www.cnblogs.com/aaron-agu/
只有毅力和决心才能使人真正具有价值!