使用sdk连接EMQX的客户端频繁connectionLost

我是用java sdk创建client连接EMQX broker的时候:
出现了回调方法频繁被触发:
解决方式:KeepAliveInterval心跳值的优化

new MqttCallback() {
            @Override
            public void connectionLost(Throwable throwable) {
                log.info("connectionLost:", throwable);//频繁被触发出现下面的错误
            }

            @Override
            public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
                log.info("sub:{},data:{}", s, new String(mqttMessage.getPayload()));
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
            }
        }

错误信息:
org.eclipse.paho.client.mqttv3.MqttException: Connection lost
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:190)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.EOFException: null
at java.io.DataInputStream.readByte(DataInputStream.java:267)
at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:92)
at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:137)
… 1 common frames omitted

解决方式:
首先思考连接断开的原因是什么?无非就是鉴权,心跳;
这里观察回掉被触发的周期 50s;(这个应该是在broker上可以配置的)
再观察我们client设置的心跳周期

    // 设置会话心跳时间 单位为秒
    //options.setKeepAliveInterval(60);//旧的 赶不上趟的心跳发送
    options.setKeepAliveInterval(40);//修改后
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值