您的位置:首页 > 运维架构

openstack nova 基础知识——Kombu

2013-04-17 14:15 351 查看



Kombu是一个AMQP(Advanced Message Queuing Protocol)消息框架。所谓框架,就是一个软件的半成品,是为了提高开发效率而开发的。

AMQP是一个协议,而RabbitMQ是对这个协议的一个实现。

Kombu和RabbitMQ的关系是什么呢?

我觉得就好像javaAPI和Structs/Hibernate这些框架的关系一样,Kombu对RabbitMQ提供的API进行了封装,使得 程序更加面向对象化,比如封装出了Exchange, Queue等这些类,使得对RabbitMQ的操作更加简单,同时,功能更加强悍。

在nova支持好几种这样的框架,可以通过配置文件来配置使用哪种框架,默认的就是使用Kombu。但是Kombu比较让人头疼的地方就是资料太少 了,谷歌百度翻墙狂搜下来,也没找到几个有用的介绍,这让小白如何是好?官方文档也甚是简陋,整个文档下来,才2、3个例子,而且还是让人摸不着头脑,没 办法,只能硬着头皮上了,把官方的那个example试探性的改了一下,改的简单了一点,最基本的原型。再加上前一篇对RabbitMQ的理解和示例,然 后再结合Kombu的文档看,也就慢慢摸清楚状况了。

简单的示例:

#! -*- coding:cp936 -*-

# entity.py

from kombu import Exchange, Queue

#定义了一个exchange

task_exchange = Exchange(‘tasks’, type=’direct’)

#在这里进行了exchange和queue的绑定,并且指定了这个queue的routing_key

task_queue = Queue(‘piap’, task_exchange, routing_key=’suo_piao’)

# send.py

from kombu import Connection

from kombu.messaging import Producer

from entity import task_exchange

from kombu.transport.base import Message

connection = Connection(‘amqp://guest:guest@localhost:5672//’)

channel = connection.channel()

message=Message(channel,body=’Hello Kombu’)

# produce

producer = Producer(channel,exchange=task_exchange)

producer.publish(message.body,routing_key=’suo_piao’)

#! -*- coding:cp936 -*-

# recv.py

from kombu import Connection

from kombu.messaging import Consumer

from entity import task_queue

connection = Connection(‘amqp://guest:guest@localhost:5672//’)

channel = connection.channel()

def process_media(body, message):#body是某种格式的数据,message是一个Message对象,这两个参数必须提供

print body

message.ack()

# consume

consumer = Consumer(channel, task_queue)

consumer.register_callback(process_media)

consumer.consume()

while True:

connection.drain_events()

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: