python rabbit mq 发布 消费

producer:

import pika
# ############################## 生产者 ##############################
import json
if __name__ == '__main__':


    cred = pika.PlainCredentials("user", "password")
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1', virtual_host="/", port=5672, credentials=cred))
    channel = connection.channel()
    message = {
    "no": "20181212",
    "reccount": 300,
    "producer": "计划发布人",
    "pushtime": "2018-12-10 15:03:44",
}
    channel.exchange_declare(exchange='test-exchange', exchange_type='direct',durable=True)  # durable为true表示server停掉后数据任然在
    channel.queue_declare(queue='test-queue', durable=True)
    channel.queue_bind(exchange='test-exchange', queue='test-queue', routing_key='test-routing-key')

    channel.basic_publish(exchange='test-exchange', routing_key='test-routing-key', body=json.dumps(message))


    print(" [x] Sent %r" % message)
    connection.close()

consumer:

import pika
import time
# ########################### 消费者 ###########################


def callback(ch, method, properties, body):
    print(" [x] %r" % body)
    time.sleep(5)
    ch.basic_ack(delivery_tag=method.delivery_tag)  # 手动确认消息处理完成


def test_consum():
    cred = pika.PlainCredentials("user", "password")
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1', virtual_host="/", port=5672, credentials=cred))
    channel = connection.channel()
    channel.exchange_declare(exchange='test-exchange', exchange_type='direct', durable=True)
    channel.queue_declare(queue='test_queue', durable=True)
    channel.queue_bind(exchange='test-exchange',
                       queue='test_queue',
                       routing_key='test-routing-key')
    channel.basic_consume(callback,
                          queue='test_queue',
                          no_ack=False)  # no_ack为false需要手动确认,队列才会删除
    channel.start_consuming()

test_consum()

说明:

1、direct模式下,不同的消费者,订阅了相同的exchange、routing-key,绑定不同的queue的话,就会同时发送到不同的queue中

2、如果多个消费者所有订阅类容一样(订阅同一个queue),则会平均分配消息给消费者,每个消费者轮循一条一条的发送,可以在channel.basic_consume之前添加

channel.basic_qos(prefetch_count=1)

来设置每一个消费者的分配权重,某个消费者可多分配几条

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值