3

同じトピックに対して大量のメッセージを取得し、別のトピックに応答メッセージを返す Web サーバーがあります。

現在、MQTT クライアントを常に接続したままにすることで、コールバックと応答メッセージの送信の両方に同じ MQTT クライアント インスタンスを再利用しています。

ただし、メッセージの受信と応答の送信を 1 サイクル行った後、別のメッセージを受信することはできますが、応答を送信することはできません。アプリケーション サーバーを再起動する必要があります。

単一の MQTTclient インスタンスを持つことは良い方法ですか? 常時接続しても大丈夫ですか?この種の要件に対する最善のアプローチは何ですか?

これが私のコードです:

public static void registerCallBack(String topicName, String userName,
        String password, String clientId, MqttCallback callback,
        MqttClient client) {
    MqttConnectOptions options = new MqttConnectOptions();
    options.setCleanSession(true);
    options.setKeepAliveInterval(30);
    options.setUserName(userName);
    options.setPassword(password.toCharArray());

    // Connect to Broker
    try {
        options.setSocketFactory(SslUtil.getSocketFactory(
                ManagerProps.MQTT_BROKER_CA_FILE.getValue(), ""));

        client.setCallback(callback);
        client.connect(options);
        client.subscribe(topicName, 0);
        log.info("successfuly registered callback to topic " + topicName);
    } catch (MqttException me) {
        log.error("MqttException, " + me);
    } catch (Exception e) {
        log.error("Exception, " + e);
    }
}

public static String publishMessage(MqttClient client, String message,
        String topic, String userName, String password) {
    MqttConnectOptions options = new MqttConnectOptions();
    options.setCleanSession(true);
    options.setKeepAliveInterval(30);
    options.setUserName(userName);
    options.setPassword(password.toCharArray());

    try {
        MqttMessage msg = new MqttMessage();
        msg.setPayload(message.getBytes());
        client.publish(topic, msg);
    } catch (MqttException e) {
        log.error("MqttException, " + e);
    } catch (Exception e) {
        log.error("Exception, " + e);
    }

    return message;
}
4

1 に答える 1