目录:
- RabbitMq与Redis队列对比
- 在win7 64位机上安装RabbitMQ
- RabbitMQ消息分发轮询 与 持久化
- RabbitMQ原理
- RabbitMQ使用场景
- RabbitMQ如何保证可靠消费
一. RabbitMq与Redis队列对比
1、RabbitMQ与Redis作用
- RabbitMQ: RabbitMQ是一个可以在不同程序间共享数据的代理,是实现AMQP(高级消息队列协议)的消息中间件的一种
- Redis: 是一个Key-Value的NoSQL数据库
2. 线程Queue,进程Queue和RabbitMQ区别
- 进程Queue用于父进程与子进程(或同一父进程中多个子进程)间数据传递
- python自己的多个进程间交换数据或者与其他语言(如Java)进程queue就无能为力
- RabbitMQ就是这样一个可以在不同程序间共享数据的代理
3、具体对比
1. 可靠消费
- Redis: 没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理
- RabbitMQ: 具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费
2. 可靠发布
- Reids: 不提供,需自行实现
- RabbitMQ: 具有发布确认功能,保证消息被发布到服务器
3. 高可用
- Redis: 采用主从模式,读写分离,但是故障转移还没有非常完善的官方解决方案
- RabbitMQ: 集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作
4. 持久化
- Redis: 将整个Redis实例持久化到磁盘
- RabbitMQ: 队列,消息,都可以选择是否持久化
5. 应用场景分析
- Redis: 轻量级,高并发,延迟敏感即时数据分析、秒杀计数器、缓存等
- RabbitMQ: 重量级,高并发,异步批量数据异步处理、并行任务串行化,高负载任务的负载均衡等
二. 在win7 64位机上安装RabbitMQ
1.安装RabbitMQ需要先安装Erlang语言开发包
- 下载地址 http://www.erlang.org/download.html 在win7下安装Erlang最好默认安装。
- C:\Program Files\erl8.3\bin 将Erlang的bin目录路径添加到环境变量
2.安装RabbitMQ 下载地址 http://www.rabbitmq.com/download.html
- 1) 按照默认安装,安装RabbitMQ
- 2) C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.8\sbin
将sbin目录添加到path环境变量中 - 3)安装完成后后就可以在windows的services.msc中看到RabbitMQ处于启动状态
- 4)切换到执行命令目录: cd C:\Program Files\RabbitMQ
Server\rabbitmq_server-3.6.8\sbin
a) 首先关闭rabbitmq: rabbitmqctl stop_app
b) 还原: rabbitmqctl reset
c) 启动: rabbitmqctl start_app
d) 添加用户: rabbitmqctl add_user root root
e) 设置权限: rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
f) 查看用户: rabbitmqctl list_users
g) 查看队列及未处理个数: rabbitmqctl.bat list_queues
3.安装pike
注:为了支持RabbitMQ,每种语言都有自己专有的模块去与RabbitMQ通信,在python中最常用的是pika
- 安装pika的方法: pip install pika
三. RabbitMQ消息分发轮询 与 持久化
1、RabbitMQ消息分发轮询:重启RabbitMq会丢失所有的queue中的数据
- RabbitMQ默认采取轮询方法,将第一个消息发给a第二个发送给b以此类推
- 默认生产者会将消息发送消费者后会等待确认,如果加上no_ack=True就不会等确认,如果消费者还未执行完就突然断了,那么这条数据不会被其他消费者接收到
生产者:不断向队列中放任务:
import pika
#1 建立一个最基本的socket
#2 ConnectionParameters指定连接的地址,可以加上端口号,用户名,密码等,本机不需要密码
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel