Kombu Consumer

本文地址:http://blog.csdn.net/spch2008/article/details/11573313


在学习Kombu ExchangeKombu Queue的过程中,对Kombu 基础中的代码产生疑问:

connection = Connection('amqp://guest:bupt@172.16.4.1:5672//')  
channel = connection.channel()  
  
media_exchange = Exchange('media', 'direct', channel)  
video_queue = Queue('video', exchange=media_exchange, routing_key='video', channel=channel)  
  
  
consumer =  Consumer(channel, queues=[video_queue], callbacks=[process_media])   
consumer.consume()  
上述代码中,Exchange与Queue仅仅是声明,应该是不可以进行操作的,为什么程序没有错误呢?


观察Consumer的构造函数:

def __init__(self, channel, queues=None, no_ack=None, auto_declare=None,
        callbacks=None, on_decode_error=None):
		
    if auto_declare is not None:
        self.auto_declare = auto_declare
		
    if self.channel:
        self.revive(self.channel)

def revive(self, channel):  

    if self.auto_declare:
        self.declare()

def declare(self):
    for queue in self.queues:
        queue.declare()

如果auto_declare不设值,采用默认None的话,auto_declare = True。所以,对应传入的queue,会依次调用declare()。


而Queue中的declare如下:

def declare(self, nowait=False):
    
    if self.exchange:
        self.exchange.declare(nowait)
		
    self.queue_declare(nowait, passive=False)

    if self.name:
        self.queue_bind(nowait)
    return self.name
可见,在该函数中,创建exchange,创建queue,并将exchange与queue进行绑定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值