[MQTT]解决MQTT客户端出现“正在进行过多的发布“/订阅端可能收不到消息的问题

解决MQTT客户端出现"正在进行过多的发布"/订阅端可能收不到消息的问题

 

症状:

发布者同时发布很多条消息,有时订阅者就是收不到,并且无论客户端还是服务端qos都设置了2.

发布者有时还出现异常:正在进行过多的发布。

其中发布者用的是Eclipse的Paho客户端。

曾经我一度怀疑服务端的性能,

后来发现是客户端的问题,

解决方法:

MqttConnectOptions options = new MqttConnectOptions();
options.setMaxInflight(1000);

最关键的就是这句options.setMaxInflight(1000);

意思是支持同时发送的消息数为1000. (默认值为10)

好的,这里提供一个简单的示例代码,使用 paho mqtt c 实现 MQTT 发布: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "MQTTClient.h" #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientPub" #define TOPIC "test/topic" #define QOS 1 #define TIMEOUT 10000L int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; MQTTClient_message pubmsg = MQTTClient_message_initializer; MQTTClient_deliveryToken token; int rc; // 创建 MQTT 客户端 MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); // 设置连接选项 conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; // 连接到 MQTT 代理服务器 if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } // 发布消息 pubmsg.payload = "Hello, MQTT!"; pubmsg.payloadlen = strlen(pubmsg.payload); pubmsg.qos = QOS; pubmsg.retained = 0; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token); printf("Waiting for publication of %s\n" "on topic %s for client with ClientID: %s\n", pubmsg.payload, TOPIC, CLIENTID); rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); printf("Message with delivery token %d delivered\n", token); // 断开连接并清理 MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } ``` 这个示例代码实现了连接到本地的 MQTT 代理服务器,发布一条消息到 `test/topic` 主题,然后断开连接并清理。如果需要更改主题、代理服务器地址、客户端ID 等参数,请自行修改代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值