MQTT未接收到消息问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MQTT未接收到消息问题相关的知识,希望对你有一定的参考价值。

参考技术A 根据接口文档订阅MQTT消息,没有接收到消息;

使用http开放接口订阅可以接收到消息

MQTT服务器默认设置消息最大为64KB,因为接收的是人脸识别的消息含图片,所以消息超过了64KB,导致发布失败,从而订阅者没有收到

修改emq.conf文件中的mqtt.max_packet_size参数大小

1.因为是docker部署的emq服务器,通过cli命令行界面查看错误日志

2.发现每发布一条识别记录业务相关的消息,就会出现 Framing error - invalid_mqtt_frame_len 的错误,根据翻译理解 消息帧错误-无效的帧长度

网上查找答案:发送的消息内容太长,需要修改mqtt服务器的配置。

3.修改配置文件

使用查找packet,从而找到mqtt.max_packet_size参数并修改

1、进入vi中,默认命令输入模式;如果已经是编辑模式,按“ESC”进入命令输入模式

2、输入斜杠“/”,这时屏幕会跳转到底部,输入栏出现"/"

3、输入需要查找的关键字,回车;输入n,查看下一个;输入N,查看上一个

我们可以通过 mqtt 桥将自定义消息属性发布设置为 pubsub

【中文标题】我们可以通过 mqtt 桥将自定义消息属性发布设置为 pubsub【英文标题】:Can we set custom message attribute publishing to pubsub over the mqtt bridge 【发布时间】:2021-02-09 16:37:20 【问题描述】:

我正在使用 MQTT 向 Google IoT Core 发送和接收消息(遥测消息)。 然后将消息转发到不同的 Pub/Sub 主题。

我想在我的消息中添加自定义属性。 目标是在我的主题上使用不同的订阅。然后,通过我的自定义属性过滤传入的消息,最后通过我的数据流管道上的“主题”获取我的消息。 我知道当我们使用 Pub/Sub 客户端时我们可以做到这一点,但我无法从 mqtt 客户端做到这一点。 我正在使用python客户端。


因此,根据要求,我添加了一些细节。这是一个非常经典的情况。 我正在使用 MQTT 客户端,如此处的 google 示例:https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#configuring_mqtt_clients。然后使用同一文档中的发布代码:https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#publishing_telemetry_events(我刚刚替换了

   for i in range(0, 60):    
        time.sleep(1)
        client.loop()

time.sleep(1),因为我不想在每条消息之间等待一分钟。

我发布消息调用之前的代码如下:publisher.publish(topic, payload) 其中 topic 是我的 PubSub 主题,payload 是我的数据。

文档说:

转发的消息数据字段包含设备发布的消息的副本,并在Cloud Pub/Sub主题中的每条消息中添加以下消息属性

(如果您想查看属性,请链接:https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#publishing_telemetry_events) 我想要做的是向这个列表添加自定义属性。 如果我直接调用 Pub/Sub 客户端,我可以这样做(来自文档):

    # Add two attributes, origin and username, to the message
    future = publisher.publish(
       topic_path, data, origin="python-sample", username="gcp"
     )

origin 和 username 是自定义属性,是否可以使用 MQTT 客户端执行此操作?

谢谢:)

【问题讨论】:

要获得任何帮助,您必须更加具体。什么有效?显示源代码。什么不起作用?显示源代码。 【参考方案1】:

所以不可能。 谷歌的建议是使用主题子目录按主题“分组”消息。

您可以将主题关联到您的注册表,然后为您的主题设置子文件夹。只要遵循此约定,您就可以拥有任意数量的子目录:

主题:主题名称 子主题:topic_name/theme1,topic_name/theme2....

【讨论】:

以上是关于MQTT未接收到消息问题的主要内容,如果未能解决你的问题,请参考以下文章

在html页面中 如何应用mqtt协议发送/接收消息

Springboot整合mqtt客户端实现发送与接收消息

Python实现MQTT接收订阅数据

paho-mqtt实现多客户端订阅一个主题,并保证消息只被接收一次

Ruby 套接字未接收到所有消息

使用 AWS 无服务器和 NodeJS 在接收器 lambda 处未接收到来自 SQS 的所有消息