RabbitMQ基本概念和使用基本概念和使用
RabbitMQ是一个消息代理,核心原理:发送消息,接收消息。
RabbitMQ主要用于组件之间的解耦,消息发送者无需知道消息使用者的存在,反之亦然。
例如一个日志系统,很容易使用RabbitMQ简化工作量,一个Consumer进行消息的正常处理,另一个Consumer复制对消息进行日志记录,
只要在程序中指定两个Consumer所监听的queue以相同的方式绑定到同一个exchange即可,剩下的消息分发工作由RabbitMQ完成。
首先通过一个非常简单的”hello world“例子介绍如何使用RabbitMQ,然后再介绍其涉及的基本概念并对交换机和队列多做点介绍。
一、helloworld例子
本例非常简单——发送一个消息”hello world“,然后获取它并输出到屏幕。
总共需要两个程序,一个发送消息叫send.py,一个接受消息并打印消息内容叫receive.py。
该图为helloworld例子的原理图:生产者send.py(Productor)把消息(”hello world“)发送到一个名为”queue“的队列中,消费者receive.py
从这个队列中获取消息。接下来看代码:
send.py(发送消息)
#!/usr/bin/env python
import pika
#第一步,连接RabbitMq服务器
rabbit_username='xxx'
rabbit_password='xxx'
credentials = pika.PlainCredentials(rabbit_username, rabbit_password)
connection = pika.BlockingConnection(pika.ConnectionParameters( host='x.x.x.x',credentials=credentials))
#channel是进行消息读写的通道
channel = connection.channel()
#第二步,创建一个名为queue的队列,然后把消息发送到这个队列
channel.queue_declare(queue='queue')
#第三步,现在可以发送消息,但是RabbitMQ不能把消息直接发送到队列,要发送到交换器,这个稍后介绍,这里使用默认交换器(exchange),它使用一个空字符串标
#识,routing_key参数必须指定为队列名称,这里为queue
channel.basic_publish(exchange='',
routing_key='queue',
body='hello world')
print "send.py:send message 'hello world',wait for receive.py deal with this message"
#退出程序前,通过关闭连接保证消息已经投递到RabbitMq
connection.close()
receive.py(获取数据)
<print ' [*] Waiting for messages. To exit press CTRL+C'
#!/usr/bin/env python
import pika
#第一步,同样连接RabbitMq服务器
rabbit_username='xxx'
rabbit_password='xxx'