openstack nova 基础知识——Kombu

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的文档看,也就慢慢摸清楚状况了。


简单的示例:

[python]  view plain copy
  1. #! -*- coding:cp936 -*-  
  2. # entity.py  
  3.   
  4. from kombu import Exchange, Queue  
  5.   
  6. #定义了一个exchange  
  7. task_exchange = Exchange('tasks', type='direct')  
  8.   
  9. #在这里进行了exchange和queue的绑定,并且指定了这个queue的routing_key  
  10. task_queue = Queue('piap', task_exchange, routing_key='suo_piao')  
[python]  view plain copy
  1. # send.py  
  2.   
  3. from kombu import Connection  
  4. from kombu.messaging import Producer  
  5. from entity import task_exchange  
  6. from kombu.transport.base import Message  
  7.   
  8. connection = Connection('amqp://guest:guest@localhost:5672//')  
  9. channel = connection.channel()  
  10.   
  11. message=Message(channel,body='Hello Kombu')  
  12.   
  13. # produce  
  14. producer = Producer(channel,exchange=task_exchange)  
  15. producer.publish(message.body,routing_key='suo_piao')  

[python]  view plain copy
  1. #! -*- coding:cp936 -*-  
  2. # recv.py  
  3.   
  4. from kombu import Connection  
  5. from kombu.messaging import Consumer  
  6. from entity import task_queue  
  7.   
  8. connection = Connection('amqp://guest:guest@localhost:5672//')  
  9. channel = connection.channel()  
  10.   
  11. def process_media(body, message):#body是某种格式的数据,message是一个Message对象,这两个参数必须提供  
  12.     print body  
  13.     message.ack()  
  14.   
  15. # consume  
  16. consumer = Consumer(channel, task_queue)  
  17. consumer.register_callback(process_media)  
  18. consumer.consume()  
  19.   
  20. while True:  
  21.     connection.drain_events()  


原文地址:http://blog.csdn.net/hackerain/article/details/7875614

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值