开发者社区 > 物联网 > 正文

MqttException (128)

MqttException (128)
at org.eclipse.paho.client.mqttv3.MqttClient.subscribe(MqttClient.java:466)
at org.eclipse.paho.client.mqttv3.MqttClient.subscribe(MqttClient.java:429)
at org.eclipse.paho.client.mqttv3.MqttClient.subscribe(MqttClient.java:404)
at com.itcjt.test.MqttSubscriber.main(MqttSubscriber.java:47)提示128 ,但是能够收到服务器下发的数据

展开
收起
游客eqvcwiwta3woo 2023-07-21 09:42:44 810 0
9 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    根据您提供的信息,MqttException (128) 表示客户端已订阅了该主题,因此客户端再次订阅该主题时会抛出此异常。这是因为MQTT协议规定,当客户端重复订阅同一个主题时,服务器会拒绝该订阅请求,并返回128错误码。

    但是,您也提到可以正常收到服务器下发的数据,这可能是因为在订阅该主题时,订阅请求被拒绝,但是之前已经订阅成功了,因此您仍然可以接收到数据。不过,为了避免这种情况的发生,建议在订阅主题之前,先判断是否已经订阅过该主题,避免发送重复的订阅请求。

    2023-07-28 08:06:30
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    MqttException错误码128表示MQTT客户端在发送SUBSCRIBE消息时收到了返回的失败响应。然而,您仍然能够接收到服务器下发的数据,这可能是因为您之前已经成功地订阅了相关主题,而这个错误一般是由于重复订阅相同主题引起的。

    如果您确认您的订阅代码没有问题,并且确实已经成功订阅了该主题,那么您可以忽略此错误。请确保您的订阅代码在合适的位置被调用,并且没有多余的重复订阅操作。

    以下是一些排查和解决问题的建议:

    1. 检查代码中是否存在重复订阅的情况。确保只在需要的时候进行一次订阅操作。

    2. 确认是否使用正确的主题进行订阅。检查订阅代码中的主题名称是否与发布消息时使用的主题名称一致。

    3. 检查网络连接和MQTT服务器的可用性。确保您的设备能够正常连接到MQTT服务器,以及服务器是否正常运行。

    4. 如果问题持续存在,可以尝试使用其他MQTT客户端或库来进行订阅操作,看是否仍然遇到相同的问题。这有助于确定问题是否与特定的MQTT客户端库有关。

    2023-07-21 18:49:24
    赞同 展开评论 打赏
  • MqttException (128)是MQTT客户端库抛出的异常,表示客户端尝试订阅主题时出现错误。

    根据给出的堆栈跟踪信息,异常是在MqttSubscriber.java文件的第47行抛出的,该行代码调用了MqttClient类的subscribe方法。

    2023-07-21 15:14:52
    赞同 展开评论 打赏
  • 月移花影,暗香浮动

    MQTT协议中的128错误码表示客户端订阅失败,可能的原因包括:

    1. 订阅的主题名称不正确或格式不正确。请确保主题名称符合MQTT协议的要求,并且没有包含任何非法字符。

    2. 订阅的QoS级别设置不正确。请确保您在订阅时设置了正确的QoS级别(0、1或2)。如果您希望接收服务器下发的所有消息,则应将QoS级别设置为0。

    3. 网络连接问题。请检查您的网络连接是否正常,并确保您的设备可以与MQTT服务器进行通信。

    4. 订阅超时。如果服务器无法及时响应客户端的订阅请求,则可能会导致订阅超时错误。请尝试增加订阅超时时间。

    根据您提供的信息,您能够收到服务器下发的数据,这表明您的代码已经成功连接到MQTT服务器并订阅了主题。因此,我建议您检查上述可能导致订阅失败的原因,并逐一排除它们。

    2023-07-21 15:14:41
    赞同 展开评论 打赏
  • 这是一个 MqttException 的异常,错误码为 128。

    这个错误码表示连接已经建立但订阅请求失败。

    尽管您能够收到服务器下发的数据,但仍可能存在以下几个原因导致订阅请求失败:

    1. 订阅主题不存在:请确保您要订阅的主题在服务器上存在,并且没有拼写错误。

    2. 订阅权限不足:如果服务器对订阅进行了权限控制,您需要确保您的客户端具有足够的权限来订阅该主题。请检查您的访问凭证或联系服务器管理员确认权限配置是否正确。

    3. 连接丢失或超时:在建立连接之后,如果连接意外中断或超时,可能会导致订阅请求失败。请检查网络连接是否稳定,尝试重新连接并重新发送订阅请求。

    4. QoS (Quality of Service) 设置错误:如果订阅请求使用了无效的 QoS 级别,也可能导致订阅失败。请确保您的订阅请求中指定的 QoS 级别是合法的,通常为 0、1 或 2。

    2023-07-21 14:11:35
    赞同 1 展开评论 打赏
  • 根据您提供的信息,MqttException 错误代码 128 是指连接已经建立并且可以接收服务器下发的数据。尽管出现了 MqttException 异常,但是您仍然能够成功收到服务器下发的数据。

    通常情况下,异常代码 128 表示 MQTT 客户端已经订阅了主题并正在接收发布到该主题的消息。这意味着您的客户端已成功连接到 MQTT 代理,并订阅了指定的主题。

    虽然有异常抛出,但这可能是因为底层实现库在处理订阅时抛出了预期的异常。如果您能够收到服务器下发的数据并正常处理,您可以忽略此异常。

    请确保您的代码逻辑正确处理了接收到的消息,并根据自己的需求进行相应的处理。如果您对异常的出现感到困惑或担忧,建议查阅相关文档、调试代码或联系 MQTT 客户端库的开发者获取更多详细的解释和指导。

    2023-07-21 13:03:06
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    如果您遇到了MqttException(128)的错误,那么可能是因为您的代码中存在一些错误或者不完整的地方。具体而言,MqttException(128)通常是由于MqttClient无法连接到MqttServer引起的。因此,您需要检查您的代码中是否存在以下问题:

    您是否正确地连接到了MqttServer?如果您的代码中没有正确地连接到MqttServer,那么您可能会遇到MqttException(128)。
    您是否正确地设置了MqttClient的属性?如果您的代码中没有正确地设置MqttClient的属性,那么您可能会遇到MqttException(128)。
    您是否正确地发送了MqttMessage?如果您的代码中没有正确地发送MqttMessage,那么您可能会遇到MqttException(128)。

    2023-07-21 10:50:31
    赞同 展开评论 打赏
  • 问题总能找到解决方案的

    建议查看一下 acl.config 中的配置是否包含:

    %%%{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
    

    上述代码默认是禁止客户端订阅$SYS/#主题。可将其注释掉。
    再重新加载文件:

    ./bin/emqx_ctl acl reload
    
    2023-07-21 10:16:24
    赞同 展开评论 打赏
  • 根据您提供的错误信息,这是一个 MqttException 的异常,错误码为 128。这个错误码表示连接已经建立但订阅请求失败。

    虽然您能够收到服务器下发的数据,但是订阅请求本身可能存在问题,导致订阅操作抛出了异常。

    出现订阅请求失败的情况可能有多种原因,以下是一些常见的可能性和解决方法:

    1. 订阅主题不存在:请确保您所订阅的主题在服务器上存在,并且没有拼写错误。

    2. 订阅权限不足:如果服务器对订阅进行了权限控制,您需要确保您的客户端具有足够的权限来订阅该主题。请检查您的访问凭证或者联系服务器管理员确认权限配置是否正确。

    3. 连接丢失或超时:在建立连接之后,如果连接意外中断或者超时,可能会导致订阅请求失败。请检查网络连接是否稳定,尝试重新连接并重新发送订阅请求。

    4. QoS (Quality of Service) 设置错误:如果订阅请求使用了无效的 QoS 级别,也可能导致订阅失败。请确保您的订阅请求中指定的 QoS 级别是合法的,通常为 0、1 或 2。

    2023-07-21 09:56:45
    赞同 1 展开评论 打赏
滑动查看更多
问答分类:
问答地址:

物联网领域前沿技术分享与交流

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载