首页 > 解决方案 > Python Paho 客户端如何从 RabbitMQ 现有队列中消费

问题描述

我有一个 RabittMQ 队列' test ',我必须使用 Paho 客户端编写一个 python 消费者来仅使用来自这个(' test ')队列的消息。

以下是我的消费者代码:

import paho.mqtt.client as mqtt
import json

server = "<machine_ip>"
port = 1883
username = "test"
password = "test"
#########################
client_id = "test_consumer"
topic = "test"

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(topic)

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
 data = str(msg.payload.decode());
 print(data)

client = mqtt.Client(client_id)
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username,password)
client.connect(server, port, 60, bind_address="")
client.loop_forever()

但是当我开始消费者时,它正在创建一个新队列,如附加的屏幕截图所示,这是我不想要的。有什么解决方案吗?

在此处输入图像描述

标签: pythonrabbitmqmqttpaho

解决方案


我不知道为什么 rabbitmq 为每个客户端(发布者或订阅者/消费者)创建一个队列,但如果你使用下面的参数,所有客户端都将使用相同的队列:

  1. 首先,你需要连接和订阅消费者:clean_session=False,并且订阅一个主题(例如'text')qos=1

  2. 您可以断开消费者(如果需要,模拟网络断开)

  3. 接下来,将您的发布者连接到: clean_session=False 并使用 qos=1,retain=False 发布到相同的主题('test')

推荐阅读