summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Behrens <cbehrens@codestud.com>2011-05-25 15:42:24 -0700
committertermie <github@anarkystic.com>2011-05-25 15:42:24 -0700
commitf2c2a593c828fc86e298d3eb31672a09b498c41f (patch)
tree11214f940dc608b331bd7de5e4ea2a93af80fbd3
parentd0be426d4e7bbfb1ecb3f078c71c1e176da441a5 (diff)
downloadnova-f2c2a593c828fc86e298d3eb31672a09b498c41f.tar.gz
nova-f2c2a593c828fc86e298d3eb31672a09b498c41f.tar.xz
nova-f2c2a593c828fc86e298d3eb31672a09b498c41f.zip
fakerabbit's declare_consumer should support more than 1 consumer. also: make fakerabbit Backend.consume be an iterator like it should be..
-rw-r--r--nova/fakerabbit.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/nova/fakerabbit.py b/nova/fakerabbit.py
index a7dee8caf..a29ba9d86 100644
--- a/nova/fakerabbit.py
+++ b/nova/fakerabbit.py
@@ -77,6 +77,10 @@ class Queue(object):
class Backend(base.BaseBackend):
+ def __init__(self, connection, **kwargs):
+ super(Backend, self).__init__(connection, **kwargs)
+ self.consumers = []
+
def queue_declare(self, queue, **kwargs):
global QUEUES
if queue not in QUEUES:
@@ -97,16 +101,20 @@ class Backend(base.BaseBackend):
EXCHANGES[exchange].bind(QUEUES[queue].push, routing_key)
def declare_consumer(self, queue, callback, *args, **kwargs):
- self.current_queue = queue
- self.current_callback = callback
+ self.consumers.append((queue, callback))
def consume(self, limit=None):
+ num = 0
while True:
- item = self.get(self.current_queue)
- if item:
- self.current_callback(item)
- raise StopIteration()
- greenthread.sleep(0)
+ for (queue, callback) in self.consumers:
+ item = self.get(queue)
+ if item:
+ callback(item)
+ num += 1
+ yield
+ if limit and num == limit:
+ raise StopIteration()
+ greenthread.sleep(0.1)
def get(self, queue, no_ack=False):
global QUEUES