Python与RabbitMQ

连接MQ

首先,无论是上传和获取数据,都需要先连接MQ,确认(创建)队列。

Python与RabbitMQ_第1张图片
连接MQ

上传数据

在建立连接后,就要开始上传和下载数据,上传数据代码如下:

Python与RabbitMQ_第2张图片
上传数据

下载数据

下载数据的代码部分如下:

Python与RabbitMQ_第3张图片
下载数据

这里有一个值得注意的地方是channel.basic_consume方法有一个参数no_ack:

如果我们设置的是no_ack=True,代表每次Consumer接到数据后,而不管是否处理完成,RabbitMQ Server会立即把这个Message标记为完成,然后从queue中删除了。如果在这个过程中,Consumer出错了,异常退出了,而数据还没有处理完成,那么非常不幸,这段数据就丢失了。

所有我们需要ack进行确认,即在处理数据后发送的ack,就是告诉RabbitMQ数据已经被接收,处理完成,RabbitMQ可以去安全的删除它了。如果Consumer退出了但没有发送ack,那么RabbitMQ就会把这个Message发送到下一个Consumer。这样就保证了在Consumer异常退出的情况下数据也不会丢失。

所以重新修改一下callback,以在消息处理完成后发送ack:

这样即使你通过Ctr-C中断了worker.py,那么Message也不会丢失了,它会被分发到下一个Consumer。

你可能感兴趣的:(Python与RabbitMQ)