Paho mqtt клиент потерял связь

У меня есть небольшая проблема с библиотекой Paho MQTT. Я регистрирую функцию обратного вызова MQTTClient_messageArrived и MQTTClient_connectionLost.

И я вызываю MQTTClient_subscribe() или MQTTClient_unsubscribe() в этой функции обратного вызова. После запуска этой функции обратного вызова. Я получил код ошибки (-3) от MQTTClient_connectionLost. Кроме того, я печатаю причину NULL.

Есть ли возможные проблемы с моей проблемой? Спасибо

Вот моя функция инициализации и функция обратного вызова:

void mqtt_initialize(void){
    int rc;

    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;

    if(MQTTClient_create(&g_MQTT_client, BROKER_ADDR, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL) < 0){
        g_mqtt_exist = MQTT_INSTANCE_NOT_EXIST;
    } else {
        g_mqtt_exist = MQTT_INSTANCE_EXIST;
    }

    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;

    MQTTClient_setCallbacks(g_MQTT_client, NULL, mqtt_connlost_cb, mqtt_arrived_cb, mqtt_delivered_cb);

    if ((rc = MQTTClient_connect(g_MQTT_client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
        MAIN_PRINT_DEBUG(0, "Failed to connect MQTT broker, return code %d\n", rc);
        mqtt_free();
    } 

    /* set subscribe control topic */
    MQTTClient_subscribe(g_MQTT_client, "topic_1", MQTT_QOS);
}


int mqtt_arrived_cb(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
    int ret = 0;
    printf("topic: %s\n", topicName);
    if(!strcmp(topicName, "topic_1")){
        printf("topic_1\n");
        ret = MQTTClient_subscribe(g_MQTT_client, "topic_2", 0);
        if (ret < 0){
            printf("mqtt operation fail\n");
        }       
    } 
    return 1;

}

void mqtt_connlost_cb(void *context, char *cause)
{
    MAIN_PRINT_DEBUG(0, "\n MQTT Connection lost\n");
    MAIN_PRINT_DEBUG(0,"     cause: %s\n", cause);
}

1 ответ

Вы пытались подключить любого другого клиента к тому же брокеру с тем же идентификатором клиента? Это может быть возможным случаем, если вы теряете соединение. Кроме того, если ваш обратный вызов выдает исключение, это приведет к потере соединения, однако в этом случае Paho восстановит соединение.

Другие вопросы по тегам