记录两个用pika和kombu实现的rabbitmq队列操作

来源:互联网 发布:js统计按钮点击次数 编辑:程序博客网 时间:2024/05/17 03:24

用kombu的

import ConfigParserfrom kombu import Connection#from log import loggerclass PyRabbitmq(object):    def __init__(self):        self.user = 'nova'        self.conn = None    def rbt_connection(self):        cf = ConfigParser.ConfigParser()        cf.read("/etc/nova/nova.conf") 从配置文件中获取rabbit的主机和密码        pwd = cf.get("DEFAULT", "rabbit_password")        hosts = cf.get("DEFAULT", "rabbit_hosts")        hosts_list = hosts.split(',')   HA中有多个rabbit主机        for host_list in hosts_list: 依次链接rabbit,知道链接成功            url = 'amqp://%s:%s@%s//' %(self.user, pwd, host_list)            try:                self.conn = Connection(url)            except Exception as e:#                logger.error("connect rabbitmq failed: %s" % e)                 print "1"        def rbt_disconnect(self) 断开连接        self.conn.release()        self.conn = None    def get_fence_nodes():         simple_queue = self.conn.SimpleQueue('simple_queue') 获取队列名为 <span style="font-family: Arial, Helvetica, sans-serif;">simple_queue 的内容</span>        if simple_queue.qsize() == 0:            fence_nodes =             simple_queue.close()            return fence_nodes                    else:            msg = simple_queue.get(block=True, timeout=1) 得到里面的数据            fence_nodes = msg.payload            msg.ack()            simple_queue.close()            return fence_nodes            def set_fence_nodes(fence_nodes):        simple_queue = self.conn.SimpleQueue('simple_queue') 连接到队列        simple_queue.put(fence_nodes) 数据传入队列        simple_queue.close()


用pika 的

import pikaimport ConfigParserimport json#from log import loggerclass PyRabbitmq(object):    def __init__(self):        self.user = 'nova'        self.port = 5673        self.msg_list = None        self.rbt_connection()     def rbt_connection(self):        cf = ConfigParser.ConfigParser()        cf.read("/etc/nova/nova.conf") 从配置文件中获取数据        pwd = cf.get("DEFAULT", "rabbit_password")        hosts = cf.get("DEFAULT", "rabbit_hosts")        hosts_list = hosts.split(',')        for host_list in hosts_list:            host = host_list.split(':')            credential = pika.PlainCredentials(self.user, pwd)            try:                pid = pika.ConnectionParameters(host[0],                                                self.port, '/',                                                credential)                connection = pika.BlockingConnection(pid)                self.channel = connection.channel()                self.channel.exchange_declare(exchange='first', type='fanout')                self.channel.queue_declare(queue='fence_nodes')                self.channel.queue_bind(exchange='first', queue='fence_nodes')#                return channel            except Exception as e:#                logger.error("connect rabbitmq failed: %s" % e)                 print "1"    def callback(self, ch, method, properties, body):        print body        self.msg_list = body    def publish(self, msg_list): 传入数据#        channel = self.rbt_connection()#        channel.exchange_declare(exchange='first', type='fanout')#        channel.queue_declare(queue='fence_nodes')#        channel.queue_bind(exchange='first', queue='fence_nodes')        msg = json.dumps(msg_list)        print msg        self.channel.basic_publish(exchange='first',                              routing_key='',                              body=msg)    def consume(self):获取数据#        channel = self.rbt_connection()#        channel.queue_declare(queue='fence_nodes')        self.channel.basic_consume(self.callback, queue='fence_nodes',                              no_ack=True)        if not self.msg_list:            return self.msg_list        else:            msg = json.loads(self.msg_list)            return msgdef get_fence_nodes():    rbt_obj = PyRabbitmq()    fence_nodes = rbt_obj.consume()    if not fence_nodes:        fence_nodes = {}        return fence_nodes    else:        rbt_obj.publish(fence_nodes)        return fence_nodesdef put_fence_nodes(fence_nodes):    rbt_obj = PyRabbitmq()    rbt_obj.consume()    if fence_nodes:        rbt_obj.publish(fence_nodes)




0 0
原创粉丝点击