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(); // 释放许可证

}

}

相关推荐
wangchunyu1149 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck10 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir10 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人10 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_9445215911 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐12 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾12 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者12 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯12 小时前
啊啊啊啊啊
java·服务器·数据库
SL_staff13 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈