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

用kombu的

import ConfigParser
from kombu import Connection
#from log import logger


class 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 pika
import ConfigParser
import json
#from log import logger


class 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 msg


def 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_nodes


def put_fence_nodes(fence_nodes):
    rbt_obj = PyRabbitmq()
    rbt_obj.consume()
    if fence_nodes:
        rbt_obj.publish(fence_nodes)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值