当前位置: 首页 > 知识库问答 >
问题:

paho-mqtt不会给我排队的消息

呼延光明
2023-03-14

使用paho-mqtt并尝试让它接收排队的消息。我使用的代理是emqx 4.2.2,这是我的脚本:

from paho.mqtt.client import Client, MQTTv5


def on_connect(mqttc, obj, flags, rc, other):
    print("    Session present: " + str(flags['session present']))
    print("    Connection result: " + str(rc))
    mqttc.subscribe([
        ('/message/1', 1)
    ])


def on_message(*args, **kwargs):
    print("received a message")


client = Client(
    client_id='test-client-id',
    protocol=MQTTv5,
)


client.username_pw_set(
    username="test-user-2",
    password="test"
)

client.on_connect = on_connect
client.on_message = on_message

client.connect(
    host='localhost',
    port=1883,
    keepalive=60,
    clean_start=False,
)

client.loop_forever()

现在,我将向代理发布一条消息:

mosquitto_pub -u test-user-2 -P test -t '/message/1' -m 'this is a message' -q 1 -V mqttv5

当客户机连接到代理时,它确实会接收消息,但如果我是用QoS1订阅的,并且消息是用QoS1发布的,我希望如果我断开客户机与代理的连接,然后发布更多的QoS1消息到该主题,然后使用相同的固定client_id将客户机重新连接到代理,那么客户机将接收在客户机不在时排队的消息。好吧,这并没有发生,用带有-c标志的mosquitto_sub模拟相同的功能,一切都像预期的那样工作,这让我问自己...paho-MQTT有问题吗?我做错什么了吗?

共有1个答案

葛宪
2023-03-14

QOS只有在客户机被订阅的情况下才起作用...如果您想在订阅之前接收消息,您需要发布设置了保留标志的消息...然后您只获得最后发送的消息。如果您真的需要获取多条消息,那么您需要使用AMQ,而不是MQTT。

 类似资料:
  • 问题内容: 我正在使用Paho发送和接收mqtt消息。到目前为止,发送消息一直没有问题,我正在使用mosquitto接收消息。 现在,我想使用Java客户端读取消息,并且注意到关于接收消息的文档越来越少。 我实现了MqttCallback接口,但仍然无法弄清楚如何阅读已订阅的主题的消息。 到目前为止,这是我的源代码,我可以使用mosquitto_sub读取消息。 问题答案: 您将在代理有时间将消息

  • 消息在持久会话中使用消息过期间隔很长一段时间,订阅服务器可以来来去去、打开和离线,每个主题的消息数量不限。 当我订阅:时,我是否会按照代理接收的顺序从主题中接收消息,这些消息与来自和的消息交织在一起? 关于消息排序的规范规定:

  • 我是MQTT的新手,但很明显“CleanSession”连接参数是控制这一点的:除非“清理”一个会话,否则在没有订阅的情况下,您将获得发布到主题的所有内容。在Linux客户端,向mosquitto_new(...,clean_session,...)传递“true”确实会阻止Linux客户端获得连接前消息。但是在Android端,当MqttConnectOptions实例传递给。Connect()

  • 我正在开发一个网站,可以连接到一个mqtt代理,并获得有效负载消息。 我使用的库是(https://eclipse.org/paho/clients/js/)。 我的问题是以下几点。当我试图获得一个标准压缩消息(gzipped)时,库抛出一个异常“错误:AMQJS0009E Malformed UTF Data:F53-52”。 如何处理压缩消息? 下面是我的代码:

  • 我正在使用Mosquitto(现在是Paho)python MQTT客户机连接到HiveMQ代理。代码是非常基本的,摘自他们的文档--https://pypi.python.org/pypi/paho-MQTT 这里的QoS也是2。 QoS的这种修改导致订户只接收到20条消息。经过进一步探讨,我意识到问题可能是由于,这是一个选项函数,它设置了QoS>0的消息的最大数量,这些消息可以同时通过网络流的

  • 我确实在我的应用程序中使用PAHO C客户机库。我确实订阅了MQTTAsync_subscribe()和QoS设置为1的主题。根据我的理解,1的意思是,消息至少被发送到客户端一次。 也许有人能帮助我理解为什么会发生这种情况,或者如何克服这种情况?