Mqtt发送信息报错

Too many publishes in progress (32202) at org.eclipse.paho.client.mqttv3.internal.ClientState.send(ClientState.java:527) at org.eclipse.paho.client.mqttv3.internal.ClientComms.internalSend(ClientComms.java:163) at org.eclipse.paho.client.mqttv3.internal.ClientComms.sendNoWait(ClientComms.java:193)

Too many publishes in progress (32202) 表明 Paho MQTT 客户端同时进行的发布操作太多了,这个错误码 32202 是客户端内部的错误代码,不是服务器返回的

当出现 Too many publishes in progress (32202) 错误时:不会排队等待,也不会自动重试

直接抛出异常,消息丢失!

Paho 的内部逻辑大概是

// 伪代码展示 Paho 的逻辑

public void send(MqttPublish message) {

if (pendingMessages.size() >= maxInflight) {

throw new MqttException(32202, "Too many publishes in progress");

}

pendingMessages.add(message); // 只有没超限才会加入队列

// ... 实际发送逻辑

}

Paho = Eclipse Paho,

是一个开源的 MQTT 客户端库。

简单理解:

你的 Java 代码要发送 MQTT 消息,需要一个"工具"

Paho 就是这个工具(就像 HttpClient 用来发 HTTP 请求一样)

最大飞行消息数

已经发送但还没收到确认的消息

时间 T1: 你发了消息 1 → 等待确认 ✈️

时间 T2: 你发了消息 2 → 等待确认 ✈️

时间 T3: 你发了消息 3 → 等待确认 ✈️

...

时间 T9: 你发了消息 9 → 等待确认 ✈️

时间 T10: 你发了消息 10 → 等待确认 ✈️

此时已经有 10 个消息在"飞行中"

时间 T11: 你想发消息 11

❌ Paho 直接拒绝:Too many publishes in progress!

(因为前 10 个还没收到确认)

时间 T12: 消息 1 的确认回来了 ✅

现在只有 9 个在飞行中

时间 T13: 你可以发消息 11 了 ✅

解决:

1.调大飞行队列

connOpts.setMaxInflight(50);

2.控制并发数

Semaphore publishSemaphore = new Semaphore(20); // 只允许 20 个并发

public void publishMessage(String message) {

publishSemaphore.acquire(); // 先拿许可证

try {

client.publish(...); // 发布消息

} finally {

publishSemaphore.release(); // 释放许可证

}

}

相关推荐
Lhappy嘻嘻6 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
伊玛目的门徒7 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
懒鸟一枚10 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我1234511 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑11 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ13 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案14 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅14 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp14 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG47714 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程