mqtt等待服务器响应超时,如何解决此问题mqtt Paho超时但未报告连接丢失

我的服务使用paho mqtt时出现问题。它超时但没有连接丢失的报告。有没有人有解决这个问题的办法?如何解决此问题mqtt Paho超时但未报告连接丢失

public void connect(String client_id) {

String tmpDir = System.getProperty("java.io.tmpdir");

MqttDefaultFilePersistence dataStore = new MqttDefaultFilePersistence(tmpDir);

MqttConnectOptions options = new MqttConnectOptions();

options.setKeepAliveInterval(120);

try {

_client = new MqttClient(_url, MqttClient.generateClientId(), dataStore);

_client.connect(options);

_client.setCallback(this);

_client.subscribe(TOPIC);

LOGGER.info("Subscribed to " + Arrays.toString(TOPIC));

LOGGER.info("MAX CORES " + MAX_CORES);

} catch (MqttException e) {

LOGGER.log(Level.INFO, "Mosquitto Error: " + e.fillInStackTrace());

connect(null);

}

}

@Override

public void messageArrived(final String topic, final MqttMessage message) throws Exception {

threadPool.execute(new Runnable(){// code});

}

使用MQTT v 1.0.0

Nov 6, 2015 2:36:52 AM org.eclipse.paho.client.mqttv3.internal.ClientState checkForActivity

SEVERE: paho-595916529752865: Timed out as no activity, keepAlive=120,000 lastOutboundActivity=1,446,777,172,455 lastInboundActivity=1,446,777,117,734 time=1,446,777,412,455 lastPing=1,446,777,172,454

2015-11-05

david

+0

你将不得不给我们一些更多的上下文给任何人来帮助。诸如此类,它是否超时作为连接的一部分,或者经过一段时间不发送数据之后?您设置了什么KeepAlive期限? –

+0

原来是60秒,现在我改为120秒 –

+0

在这个问题上有什么好运? –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT中,当客户端向服务器发送一个消息后,如果客户端需要等待服务器响应,可以使用QoS(Quality of Service)来保证消息的可靠传输。在QoS为1或2的情况下,客户端需要等待服务器响应,如果超时收到响应,客户端可以选择重新发送消息或者放弃此次发送。 在MQTT中,客户端可以通过设置keep alive机制来检测网络连接是否正常。如果客户端设置了keep alive时间,并且服务器在一定时间内没有收到客户端的消息,就会认为客户端已经断开连接。在这种情况下,服务器将会发送一个disconnect消息给客户端,客户端可以根据这个消息来判断是否超时。 如果你使用的是paho-mqtt库,可以通过设置on_publish函数的返回值来判断发送消息是否成功。如果返回0表示发送成功,如果返回1表示发送失败。同时,你也可以设置on_publish函数的超时时间,以便在超时后进行处理。以下是一个示例代码: ``` import paho.mqtt.client as mqtt client = mqtt.Client() def on_publish(client, userdata, mid): print("Message published.") return 0 client.on_publish = on_publish client.connect("broker.hivemq.com", 1883, 60) client.publish("test/topic", "Hello World!", qos=1) # 设置超时时间为5秒 client.loop(timeout=5) ``` 在上面的代码中,我们设置了on_publish函数来判断消息是否成功发送,并且设置了超时时间为5秒。如果超时收到服务器响应,客户端会自动断开连接并抛出异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值