NewLifeX / NewLife.MQTT

最流行的物联网通信协议MQTT,包括客户端、服务端和Web管理平台

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mqtt服务端重启使newlife.mqttclient崩溃

nygula opened this issue · comments

重现方式:
使用mqttclient连接mosquitto.
任务管理器中服务重启 mosquitto
然后mqttclient崩溃. 且 5秒后并不能恢复.
使用其他mqtt第三方客户端连接mosquitto正常

是否可以增加一个事件来表达 mqttserver 关闭了. 或者mqttclient close事件.
这样我们可以手动增加一个委托来让它如何重连.
其次依赖newlife.core版本一起更新一下.

var mc = new MqttClient
{
Log = XTrace.Log,
Server = $"tcp://{ServerIP}:{Port}",
UserName = Username,
Password = Password,
ClientId = Guid.NewGuid()+"",
KeepAlive =5

            };
            _mc = mc;
            _mc.ConnectAsync();
            var rt = _mc.SubscribeAsync(PullToptic, (e) => {
                XTrace.WriteLine($"sub:" + PullToptic + e.Topic + ":" + e.Payload.ToStr());
            });
            _mc.Received += _mc_Received;

12:06:31.272 12 Y T System.AggregateException: 发生一个或多个错误。 ---> System.Threading.Tasks.TaskCanceledException: 已取消一个任务。
--- 内部异常堆栈跟踪的结尾 ---
在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
在 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
在 NewLife.MQTT.MqttClient.DoPing(Object state) 位置 D:\X\NewLife.MQTT\NewLife.MQTT\MqttClient.cs:行号 388
在 NewLife.WeakAction1.Invoke(TArgs e) 位置 D:\X\Src\NewLife.Core\Event\WeakAction.cs:行号 105 在 NewLife.Threading.TimerScheduler.Execute(Object state) 位置 D:\X\Src\NewLife.Core\Threading\TimerScheduler.cs:行号 254 12:06:33.774 14 Y T [Mqtt]正在连接[Tcp://192.168.1.222:1883] 12:06:33.775 14 Y T Tcp.Open Tcp://0.0.0.0:9410=>192.168.1.222:1883 12:06:33.778 11 Y - Tcp.Close TcpSessionDispose Tcp://0.0.0.0:9410=>192.168.1.222:1883 12:06:33.781 14 Y T System.AggregateException: 发生一个或多个错误。 ---> System.Threading.Tasks.TaskCanceledException: 已取消一个任务。 --- 内部异常堆栈跟踪的结尾 --- 在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 在 NewLife.MQTT.MqttClient.DoPing(Object state) 位置 D:\X\NewLife.MQTT\NewLife.MQTT\MqttClient.cs:行号 388 在 NewLife.WeakAction1.Invoke(TArgs e) 位置 D:\X\Src\NewLife.Core\Event\WeakAction.cs:行号 105
在 NewLife.Threading.TimerScheduler.Execute(Object state) 位置 D:\X\Src\NewLife.Core\Threading\TimerScheduler.cs:行号 254

commented

从错误信息来看,的确是网络断开了,且心跳是启动了重连机制,只是重连并没有成功。
待服务端恢复以后,应该可以看到重连成功的日志信息。

只要网络断开. 就会出现这个问题