封装的RabbitmqClient对象
#!/usr/bin/env python
import pika
import logging
class RabbitMQClient:
def __init__(self, conn_str='amqp://guest:[email protected]:5672/Authorization/'):
self.exchange_type = "topic" # 特定的路由键完全匹配,会推送到指定的队列上
self.connection = pika.BlockingConnection(pika.URLParameters(conn_str))
self.channel = self.connection.channel()
self._declare_retry_queue()
logging.debug("Rabbitmq队列连接成功")
def _declare_retry_queue(self):
"""
创建异常交换器和队列,用于存放没有正常处理的消息。
:return:
"""
self.channel.exchange_declare(exchange='RetryExchange',
exchange_type='fanout',
durable=True)
self.channel.queue_declare(queue='RetryQueue',
durable=True)
# 绑定队列到指定的交换机
self.channel.queue_bind('RetryQueue', 'RetryExchange', 'RetryQueue')
def declare_exchange(
self,
exchange=None, # 交换机的名字,为空则自动创建一个名字
exchange_type='', # 默认交换机类型为direct
passive=False, # 检查交换机是否存在,存在返回状态信息,不存在返回404错误
durable=False, # 设置是否持久化)
auto_delete=False, # 最后一个队列解绑则删除
internal=False, # 是否设置为值接收从其他交换机发送过来的消息,不接收生产者的消息
arguments=None): # 一个字典,用于传递额外的参数
self.channel.exchange_declare(exchange=exchange,
exchange_type=exchange_type if exchange_type else self.exchange_type,
durable=True)
def declare_queue(
self,
queue='', # 队列的名字,默认为空,此时将自动创建一个名字,
passive=False, # 检查一下队列是否存在,如果该参数为True,该方法判断队列存在否,不会声明队列;存在返回queue的状态,不存在报错
durable=False, # 队列持久化参数,默认不持久化
exclusive=False, #