用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()
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)