class StatusWorker(object): def __init__(self, rabbitmq_ip, queue_name, db_ip, db_port, db_name, collection_name): self.db = Mongo(db_ip, db_port, db_name) self.collection_name = collection_name self.connection = pika.BlockingConnection( pika.ConnectionParameters(host=rabbitmq_ip)) self.channel = self.connection.channel() self.channel.queue_declare(queue=queue_name, durable=True) self.channel.basic_qos(prefetch_count=5) self.channel.basic_consume(self.callback, queue=queue_name) print ' [*] Waiting for messages. To exit press CTRL+C' self.channel.start_consuming() def callback(self, ch, method, properties, body): print " [x] Received %r" % (body, ) item = json.loads(body) self.db.insert(self.collection_name, item) ch.basic_ack(delivery_tag=method.delivery_tag)
class RegisterWorker(object): def __init__(self, rabbitmq_ip, queue_name, db_ip, db_port, db_name, collection_name): self.collection_name = collection_name self.db = Mongo(db_ip, db_port, db_name) def start(self): self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=rabbitmq_ip)) self.channel = self.connection.channel() self.channel.queue_declare(queue=queue_name) self.channel.basic_qos(prefetch_count=1) self.channel.basic_consume(self.on_request, queue=queue_name) self.channel.start_consuming() def on_request(self, ch, method, props, body): print "Receive %s"%body item = json.loads(body) result = self.register(item) ch.basic_publish(exchange='', routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id = \ props.correlation_id), body=result) ch.basic_ack(delivery_tag = method.delivery_tag) def register(self, item): items = self.db.find(self.collection_name, {'id': item['id']}) if items.count() == 0: print "Discover New Device %s" %item['id'] self.db.insert(self.collection_name, item) items = self.db.find(self.collection_name, {'id': item['id']}) if items.count() == 1: return items[0]['id'] return "DB Error" def __del__(self): self.connection.close()