记一次MQTT偶现无法发送Message至Android客户端的解决

mosquitto心跳和网络重连机制(基于MQTT协议) 通过对mosquitto2.0.15源码的分析,介绍mosquitto心跳和网络重连机制 阅读详情

Bug概述

  • 服务端、客户端通信使用MQTT
  • 客户端发生 小概率偶现 无法收到服务端Message,而后端显示已发送

Bug排查结果

  • 客户端的MqttAndroidClient使用的ClientId因后端 没给值,导致ClientId为空 — 让后端解决
  • 客户端没有断线重连机制,不要听信部分地方说的 在MqttCallbackExtended的connectionLost方法中写connect方法,这是错误的,有更好的,用MqttConnectOptions的setAutomaticReconnect方法 — 客户端解决
  • Android客户端的MqttAndroidClient 执行connect存在,无法释放的情况,具体是Service的onDestory中写了disconnect,在onStartCommand中写了connect,这不对称,改至onCreate — 客户端解决
  • 解决上一条,正因为有上一条,结合MqttConnectOptions的setCleanSession方法的描述(见下面的说明),将setCleanSession设置为true解决 — 客户端解决
    /**
    <ul><li>Sets whether the client and server should remember state across restarts and reconnects.</li>
    <li><ul></li>
    <li><li>If set to false both the client and server will maintain state across</li>
    <li>restarts of the client, the server and the connection. As state is maintained:</li>
    <li><ul></li>
    <li><li>Message delivery will be reliable meeting</li>
    <li>the specified QOS even if the client, server or connection are restarted.</li>
    <li><li> The server will treat a subscription as durable.</li>
    <li></ul></li>
    <li><lI>If set to true the client and server will not maintain state across</li>
    <li>restarts of the client, the server or the connection. This means</li>
    <li><ul></li>
    <li><li>Message delivery to the specified QOS cannot be maintained if the</li>
    <li>client, server or connection are restarted</li>
    <li><lI>The server will treat a subscription as non-durable</li>
    <li></ul>
    */

    状态会被保留,常驻。若会连接泄露,则会导致服务端有同一个topic多份的监听实例,
    注意。。。。这里我猜测的。。。我觉得后端的mqtt部分,对多份监听只回调了第一份。而我们新的监听实例在后面。。。故,这就接受不到回调。自然就出现了后端有发送,客户端没有接收到的结果。
【Android】MQTT入门——服务器部署与客户端搭建 MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽、和不稳定网络环境的物联网应用而设计,它可以用极少的代码为互联网设备提供实时可靠的消息服务。 阅读详情

相关推荐

基于android studio 开发MQTT入门上手

Hi大家好,今天给大家分享下MQTT的入门教学,能帮助大家快速上手使用。 首先在学习MQTT协议前,让我们先了解下MQTT是个什么东西,以下链接简单的介绍了MQTT协议的含义,以及它的特性。没了解过的同学先花几分钟熟悉下,看不懂没关系,在接下来的步骤中会慢慢解释。 https://www.runoob.com/w3cnote/mqtt-intro.htmlhttps://www.runoob.com/w3cnote/mqtt-intro.html 我们先需要下载MQTT的服务器:em...

weixin_57896443的博客 1万+

前后端实现mqtt物联网消息互通对话(图文详解)

需求:前端使用mqtt订阅主题和硬件设备进行通讯功能,不走后端,前端操作可以控制。从部署到对话,跟着图文一套下来你也可以学会。很简单的。后端用node,前端就用原生的js,如果要使用vue,可以看我另外一篇:还在写。

请叫我欧皇!的博客 7446

MQTT Android客户端的使用介绍

MQTT Android客户端的使用介绍 . 简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议。 它是一种 发布/订阅 ,极其简单和轻量级的消息传递协议,专为受限设备和低带宽,高延迟或不可靠的网络而设计。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境。相对于XMPP,MQTT更加轻量级,并且占用的宽带低。 .

weixin_42324979的博客 2807

MQTT消息实例

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。这就是为什么在介绍里说它非常适合“在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。(5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。

weixin_43692357的博客 1684

Android-MQTT通讯,连接MQTT服务器,发送数据,订阅主题

1,首先用的类库是这个,在app的gradle里添加依赖 compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0' 另外还有一个service库,用来后台尝试重连功能的,这里没有使用过,需要更多功能的可以添加这个,并研究一下使用compile 'org.eclipse.paho:org.eclipse.paho.andro...

honghuinie的博客 8023

【Android】MQTT入门——服务器部署与客户端搭建_android mqtt

是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽、和不稳定网络环境的物联网应用而设计,它可以用极少的代码为互联网设备提供实时可靠的消息服务。

2401_84010326的博客 2472

高Android版本中MqttAndroidClient库无法使用问题:MqttAndroidClient未对AndroidX适配导致

高Android版本中MqttAndroidClient库无法使用问题

kankanlj的博客 3221

MQTT message push实现研究

本文利用开源软件对MQTT协议进行了消息推送进行分析。其中引用了网上的部分内容; 其中的一些图片请参见下面链接中的完整文件: http://download.youkuaiyun.com/detail/junglefly/9168135 IBM® WebSphere® MQ Telemetry Transport(简称 MQTT)是一种基于 TCP/IP 的轻量级发布 / 预订协议,用于连接

junglefly的学习工作纪录 4360

android 实现mqtt消息推送,以及断线重连的问题解决

添加权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 允许程序访问WiFi网络信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STA

Yweir的博客 4302

mqtt协议实现安卓的推送客户端实现

这一周,姐姐亲自实践了一下,感觉还不错分享给大家    MQTT是一项消息传递技术,由IBM再2001年发布。 总结一下,机制就是使用一个代理服务器message broker, 客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息, 同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。 只要手机客户端,连

D调的华丽 1673

Android平台MQTT客户端开发实战详解

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布/订阅模型的通信协议,专为低带宽、高延迟或不可靠网络环境设计,广泛应用于物联网(IoT)领域。它基于TCP/IP协议,具备高效的消息传输机制和良好的跨平台兼容性。MQTT协议的核心优势在于其简洁的通信机制和对资源受限设备的良好支持,使其成为智能设备、传感器网络和远程监控系统中的首选通信方式。

weixin_28931507的博客 1424

MQTT - Android MQTT 编码实战(MQTT 客户端创建、MQTT 客户端事件、MQTT 客户端连接配置、MQTT 客户端主题)

MQTT - Android MQTT 编码实战(MQTT 客户端创建、MQTT 客户端事件、MQTT 客户端连接配置、MQTT 客户端主题)

weixin_52173250的博客 1834

芯片低功耗设计实战:CPF与UPF流程选择指南(附工具对比)

本文深入探讨了芯片低功耗设计实战中CPF与UPF流程的选择策略。文章从两者本质差异与演进脉络出发,结合Cadence与Synopsys工具链的深度支持实况,为工程师提供了基于项目场景的决策框架。重点分析了在混合工具链环境下如何实施流程与验证,并强调了利用Spyglass等工具确保功耗意图无损传递的关键技巧,旨在帮助团队做出明智的流程抉择,提升设计效率与可靠性。

weixin_29197051的博客 407

Android MQTT客户端开发实例

1.添加mqtt依赖 app的build中添加依赖如下 //mqtt compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0' compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' 2.自定义MQTT工具类 package nano...

风吹草低见牛羊 7792

Argoverse数据集可视化/Argoverse-api

argoverse可视化,argoverse-api配制方法

learning_man的博客 9561

【Visual Assist X助手安装问题】Visual Assist X无法安装(双击安装包没反应) | Visual Assist X安装后在Visual Studio中找不到(亲测有效)

本文分享了Visual Assisant X助手的安装与使用问题的详细解决办法,因为网上搜集的信息比较少,所以有一定的参考价值。考虑到很多开发新手会遇到上述问题,可能对Windows系统不熟悉,所以相关操作步骤讲解的很详细!

dvlinker的技术专栏 6万+

基于Paho Android Service 实现MQTT协议通信Android客户端

目录1 MQTT &amp;amp; mosquitto及相关代理库和客户端库1.1 MQTT1.2 mosquitto1.3 Phho Android Service2 MQTT服务器搭建2.1 Windows2.2 Mac2.3 Linux(Ubuntu18.04)2.3.1 通过安装包管理工具安装2.3.2 通过源码安装3 Mosquitto的简单使用3.1 mosquitto命令及配置简介3.2 ...

易名 2069

11、牛转录组分析的实用生物信息学流程

本文详细介绍了一套实用的牛转录组分析生物信息学流程,涵盖从数据提取、基因组索引生成、读取比对到单样本表达分析及差异表达分析的完整步骤。使用Angus和Brahman牛的RNA-seq数据作为示例,介绍了HTSEQ、featureCounts和StringTie等工具在基因表达计数中的应用,并结合edgeR和limma进行差异表达分析。文中提供了详细的命令行与R代码示例,包含常见问题解答与关键注意事项,帮助研究人员高效、准确地完成转录组数据分析。

ios99的博客 111

Mqtt从服务端到Android客户端搭建(Android客户端搭建)

一、简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。 此处不再引入官方文字描述,以个人开发认识浅谈一下 本文分为两部分: 1、MQTT基于window服务端的建立; 2、 MQTT Android客户端的实现。 二、 Android客户端搭建 以我在github上的[MQTT] https://github.co...

yang1159的博客 5361

Open3D 进阶(22)间接平差法拟合空间曲线

空间曲线拟合在电力线三维重建中有着广泛的应用,本文利用python使用间接平差法对三维空间曲线的拟合进行代码实现。

点云侠的博客 1058

华为OD机试 - 素数之积 - 数学问题(Java 2025 A卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2133

Android Mqtt客户端的接入

前言 随着物联网的不断发展,Android在设备上的应用也越来越广泛。在设备和服务器通信时,大部分app都是主动去请求的,基于Mqtt发布/订阅的机制可以实现双向的消息通讯。 搭建windows版的Mqtt服务 下载地址:http://activemq.apache.org/apollo/download.html 1.将下载后的appollo的压缩包解压到一个目录(eg:D:\apollo),使用cmd命令切换到appollo的bin目录下, 运行“apollo.cmdcreate my...

swedne的博客 2686

在 AS ABAP 7.40 SP05 里把 HANA 存储过程纳入 ABAP 生命周期:AMDP 实战示例与踩坑笔记

文章摘要:AMDP(ABAP Managed Database Procedures)是SAP推出的框架,用于在ABAP中管理数据库端的存储过程或函数,特别适用于HANA数据库。它通过将数据库语言(如SQLScript)嵌入ABAP方法,实现数据处理逻辑的"下推"(code pushdown),减少应用层与数据库间的数据传输。AMDP适用于需要数据库特有能力或大规模数据处理的场景,但应优先考虑Open SQL或ABAP CDS等更简单的方案。开发时需注意数据库类型检查、参数前缀(:)等语

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

使用python编写mqtt客户端向EMQX服务器发送数据

摘要:本文介绍如何用python编写一个mqtt客户端向EMQX服务器发送数据,实现一个简易的本地物联网服务器。

ieeee.blog.youkuaiyun.com 3287

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 678

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 发版流程及对外版本规范
下一篇: 处理 Comparable接口不严谨导致Comparison method violates its general contract!
手艺人王学明
手艺人王学明 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄17年 441粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值