MQTT に IA92 Java 実装を使用しています。これにより、MQTT ブローカーに接続できます。接続を確立するために、私は次のようなことをしています:
// Create connection spec
String mqttConnSpec = "tcp://the_server@the_port";
// Create the client and connect
mqttClient = MqttClient.createMqttClient(mqttConnSpec, null);
mqttClient.connect("the_id", true, 666);
問題は、サーバーが応答を送信するのに時間がかかりすぎて、タイムアウト例外がスローされることがあることです。
org.apache.harmony.luni.platform.OSNetworkSystem.connectStreamWithTimeoutSocket(OSNetworkSystem.java:130)
at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:246)
at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:533)
at java.net.Socket.connect(Socket.java:1055)
at com.ibm.mqtt.j2se.MqttJava14NetSocket.<init>((null):-1)
at com.ibm.mqtt.j2se.MqttJavaNetSocket.setConnection((null):-1)
at com.ibm.mqtt.Mqtt.tcpipConnect((null):-1)
at com.ibm.mqtt.MqttBaseClient.doConnect((null):-1)
at com.ibm.mqtt.MqttBaseClient.connect((null):-1)
at com.ibm.mqtt.MqttClient.connect((null):-1)
at com.ibm.mqtt.MqttClient.connect((null):-1)
私がする必要があるのは、mqtt クライアントにタイムアウトを決定させるのではなく、手動でタイムアウトを設定することです。ドキュメントには次のように記載されています。タイムアウトや再試行など、MQ Telemetry Transport 接続の属性を設定する方法もあります。
しかし、正直なところ、私はそれについて何も見つけていません。javadoc リファレンス全体を調べましたが、タイムアウト構成の証拠はありません。オープンソースではないため、ソースコードを見ることができません。
では、Mqtt 接続のタイムアウトを設定するにはどうすればよいでしょうか?