Мы используем mosquitto в нашем проекте для подключения наших IoT-устройств к облаку.
Однако мы всегда получаем ошибку «слишком много публикаций в процессе», когда есть только 30 устройств (сервер имеет 3.1 CPU и 8GБАРАН).
Мы попытались установить qos на 0,1,2.Однако никто не работал.
Может кто-нибудь дать несколько советов, как это исправить?
publishmesssage
public static void publishMessage(MqttPubMsg config) {
String clientId = MqttClient.generateClientId();
MemoryPersistence persistence = new MemoryPersistence();
MqttClient sampleClient = new MqttClient(config.getBroker(), clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(config.getUsername());
connOpts.setPassword(config.getPassword().toCharArray());
connOpts.setConnectionTimeout(mqttConnectTimeout);
connOpts.setKeepAliveInterval(mqttKeppAliveInterval);
sampleClient.connect(connOpts);
MqttMessage message = new MqttMessage(config.getContent());
message.setQos(0);
sampleClient.publish(config.getTopic(), message);
System.out.println("Message published");
}
mosquitto.conf
max_inflight_messages 0
max_queued_messages 0
max_connections -1
подписаться на сообщение
public static void subscribeMessage(MqttSubMsg config) {
System.out.println(config.getBroker());
String clientId = MqttClient.generateClientId();
MemoryPersistence persistence = new MemoryPersistence();
MqttClient sampleClient = new MqttClient(config.getBroker(), clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(config.getUsername());
connOpts.setPassword(config.getPassword().toCharArray());
connOpts.setConnectionTimeout(mqttConnectTimeout);
connOpts.setKeepAliveInterval(mqttKeppAliveInterval);
System.out.println("run receive...");
sampleClient.setCallback(new controllers.PushCallback());
MqttTopic mtopic = sampleClient.getTopic(config.getTopic());
connOpts.setWill(mtopic, "close".getBytes(), 0, true);
sampleClient.connect(connOpts);
int[] Qos = {0};
String[] topic1 = {config.getTopic()};
sampleClient.subscribe(topic1, Qos);
}