消息队列(消息中间件)常见的有三种:RabbitMQ、ActiveMQ、ZeroMQ
这里要说的是RabbitMQ。
需要明确的几个概念:
Broker: 翻译为中文应该是“经纪人”、“中间人”吧,就是指RbbitMQ服务本身
vhost: 虚拟主机,做权限控制用的,每个包含一组exchanges, queues,bindings
Exchange: “交换机”,可以理解为有路由表(binding)的路由程序,而每个消息都有一个routing key的属性,嗯,和路由原理很相像。
Queue: 消息的终点,消息到达这里后,等待着被消费者取走
Binding: 就是路由规则
Routing Key: 相当于ip地址
producer: 嗯
consumer: 嗯
channel: --这个不是很明白呀,通信流?会话?
python可以使用的库有py-amqplib, txAMQP, pika,我跟着tutorial学了pika
首先,需要与RabbitMQ server建立连接,并在连接中建立channel
import pika connection = pika.BlokingConnection(pika.ConnectionParameters('localhost', 5672)) channel = connection.channel()
第二步,需要确认接收队列存在,若将消息发给一个不存在的队列,RabbitMQ会丢弃这个消息。我们来创建一个叫做hello的队列吧:
channel.queue_declare(queue='hello')
第三步, 这时已经可以发送消息了,消息必然要经过exchange才能到达queue,关于exchange,附录的文章中有比较好的说明。这里只需选择默认exchange。
channel.basic_publish(exchange='',routing_key='hello',body='Hello Word!')
结束程序前,需要确认network buffers 已经被刷新,关闭连接即可。
connection.close()
-----------------------------------------------------------------------
Listing queues
You may wish to see what queues RabbitMQ has and how many messages are in them. You can do it (as a privileged user) using the rabbitmqctl tool:
$ sudo rabbitmqctl list_queues Listing queues ... hello 0 ...done.
(omit sudo on Windows)
------------------------------------------------------------------------
==============================================================
该consumer端到队列里面去消息了,同样的,建立连接和channel,嗯代码同前。在开始之前,首先确认下队列已经存在,跟producer端一样的,因为不知道是哪边程序先启动,这样做很保险。
channel.queue_declare(queue='hello')
接收端得到一个消息,会调用用户定义的回调函数,那么我们先定义一个回调函数吧。
简单点的,打印消息
def callback(ch, method, properties, body):print “ Received %r" % (body,)
然后告诉RabbitMQ我定义的这个回调函数应该处理hello队列中的消息(这要求此队列必须存在,我们之前用queue_declare确认过了):
channel.basic_consume(callback,queue='hello',no_ack=True)
好了,进入等待状态吧,有消息过来了,就会调用之前定义好的回调函数了:
channel.start_consuming()
资源链接:
官网tutorial: http://www.rabbitmq.com/tutorials/tutorial-one-python.html
[翻译] [RabbitMQ+Python入门经典] 兔子和兔子窝:http://blog.ftofficer.com/2010/03/translation-rabbitmq-python-rabbits-and-warrens/
原文: https://bmark.us/bmark/readable/6067c44d09ee21
消息队列RabbitMQ入门介绍 http://www.nsbeta.info/archives/200