首页 > 解决方案 > 在 AWS EC2 ubuntu 实例上使用自己的 mosquitto 代理时重新连接到 mqtt 代理失败

问题描述

我之前在我的 esp8266 上使用了蚊子的测试 mqtt 代理(即 test.mosquitto.org),并带有重新连接代码,即如果连接由于路由器重置而中断,那么当互联网恢复时它将重新连接到代理。它工作正常。我在 Cloud Mqtt 代理中使用了相同的代码,它也运行良好。但是现在,当我在 AWS EC2 上托管我自己的 mosquitto 代理(如本教程MQTT 代理)时,它在路由器重置后停止重新连接。以下是我在 ESP8266 上的代码:-

#include <ESP8266WiFi.h>
#include <PubSubClient.h>       

const char* topic = "someTopic";
String clientId = "randomClientId";
const char* mqttServer = "xxxxxxxxxxxxxxx.compute.amazonaws.com";
const int mqttPort = 1883;

PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);

  client.setServer(mqttServer, mqttPort);
  client.setCallback(callback);
  lastReconnectAttempt = 0;
  delay(500);
}

boolean reconnect() {
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      client.subscribe(topic);
    } 
  return client.connected();
}

void loop() {
  if (!client.connected()) 
  {
    long now = millis();
    if (now - lastReconnectAttempt > 5000) 
    {
      lastReconnectAttempt = now;
      if (reconnect()) 
      {
        lastReconnectAttempt = 0;
      }
    }
  } else 
  {
    client.loop();
  }  
}

如果有人知道原因,请告诉我。

标签: linuxmqttesp8266mosquittoarduino-esp8266

解决方案


推荐阅读