我正在使用IA92 Java实现的MQTT,它允许我连接到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连接设置超时时间呢?