同じトピックに対して大量のメッセージを取得し、別のトピックに応答メッセージを返す 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;
}