https://www.cnblogs.com/guyuyun/p/14970592.html

import pika

#连接方法一
userx=pika.PlainCredentials(cfg['mq']['username'], cfg['mq']['password'] )
connParam=pika.ConnectionParameters(host=cfg['mq']['host'], port=cfg.getint('mq',"port"),virtual_host=cfg['mq']['vhost'],credentials=userx, heartbeat=0) #
conn=pika.BlockingConnection( parameters= connParam )

#通道
channalx=conn.channel()
#声明发布和订阅通道,如果可以确认通道存在则可以去掉该句
channalx.exchange_declare(exchange=ex_name,exchange_type='direct') #自动创建 ,durable=True
channalx.queue_declare(queue=que_name) #断开自动删除  exclusive=True, ,durable=True 

#channalx.basic_qos(prefetch_count=1) #一次最多能处理多少条消息 
#订阅
channalx.queue_bind(exchange=ex_name,queue=que_name,routing_key=rou_name)
#channalx.queue_bind(exchange=cfg['ex_name'],queue=cfg['que_name2'],routing_key=cfg['rou_name2'])

#接收准备
channalx.basic_consume(que_name,do_callback,auto_ack=True )
channalx.start_consuming() #开始接收消息

参数说明

https://blog.csdn.net/wohu1104/article/details/105598159

  • channel.exchange_declare
callback=None : 当 Exchange.DeclareOk 时 调用该方法, 当 nowait=True 该值必须为 None
exchange=None: 交换器名称,保持非空,由字母、数字、连字符、下划线、句号组成
exchange_type=‘direct’: 交换器类型
passive=False: 执行一个声明或检查它是否存在
durable=False: RabbitMQ 重启时保持该交换器的持久性,即不会丢失
auto_delete=False: 没有队列绑定到该交换器时,自动删除该交换器
internal=False: 只能由其它交换器发布-Can only be published to by other exchanges
nowait=False: 不需要 Exchange.DeclareOk 的响应-Do not expect an Exchange.DeclareOk response
arguments=None: 对该交换器自定义的键/值对, 默认为空
  • channel.queue_declare
callback : 当 Queue.DeclareOk 时的回调方法; 当 nowait=True 时必须为 None.
queue=’’ : 队列名称
passive=False : 只检查队列是否存在
durable=False : 当 RabbitMQ 重启时,队列保持持久性
exclusive=False : 仅仅允许当前的连接访问
auto_delete=False : 当消费者取消或者断开连接时, 自动删除该队列
nowait=False : 当 Queue.DeclareOk 时不需要等待
arguments=None : 对该队列自定义键/值对
  • channel.queue_bind
callback: 当 Queue.BindOk 时的回调函数, 当 nowait=True 时必须为 None
queue: 要绑定到交换器的队列名称
exchange: 要绑定的源交换器
routing_key=None: 绑定的路由键
nowait=False: 不需要 Queue.BindOk 的响应
arguments=None: 对该绑定自定义键/值对