示例#1
0
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)
示例#2
0
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()