本节内容:
- RabbitMQ队列
- Memcached
- Redis
1. RabbitMQ
安装 http://www.rabbitmq.com/install-standalone-mac.html
安装python rabbitMQ module
pip install pikaoreasy_install pikaor-
源码 https://pypi.python.org/pypi/pika
实现最简单的队列
1.1 Work Queues
在这种模式下,RabbMQ会默认将P发的消息依次分发给各个消费者(c),跟负载均衡差不多
此时,先启动消息生产者,然后再分别启动3个消费者,通过生产者多发送几条消息,你会发现,这几条消息会被依次分配到各个消费者身上。
下面这段代码,不管是Ctrl + C手动杀掉接收端的进程还是长时间处理一个消息,都不会使消息丢失。
def callback(ch, method, properties, body):
print
" [x] Received %r" % (body,)
time.sleep(body.count('.'))
print
" [x] Done"
ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_consume(callback,
queue='hello')
1.2 消息持久化
保证在RabbitMQ服务挂掉后,队列和消息都不会丢失就必须进行消息持久化
-
channel.queue_declare(queue='hello', durable=True)
channel.basic_publish(exchange='',
routing_key="task_queue",
body=message,
properties=pika.BasicProperties(
delivery_mode = 2, # make message persistent
))