public void Start(out string errMsg) { errMsg = ""; if (IsRuning) { return; } // 加载日志数据发布服务所需配置文件信息 this.mqttParam = new MQTTParam(); if (!LoadConfig(out errMsg)) { return; } // 检查端口是否空闲 if (!IPTool.IsValidPort(this.mqttParam.port)) { errMsg = "日志服务器的发布端口被占用,请更换端口号"; return; } // 开启MQTT服务当做发布器 mqttServer = new MQTTServer(mqttParam); mqttServer.Start(out errMsg); if (!mqttServer.IsRuning || !string.IsNullOrWhiteSpace(errMsg)) { Stop(); return; } // 开启消息队列的消费器 queue = new BlockingCollection <TraceItem>(); task = new Task(() => { foreach (TraceItem item in queue.GetConsumingEnumerable()) { try { ActionTimeout <TraceItem> timeout = new ActionTimeout <TraceItem>(); timeout.Do = Excute; bool isTimeout = timeout.DoWithTimeout(item, TimeSpan.FromSeconds(5)); //只等待5秒 if (isTimeout) // 超时 { GC.Collect(); } } catch { } } }, TaskCreationOptions.LongRunning); task.Start(); IsRuning = true; }
public MQTTServer(MQTTParam mqttParam) { this.mqttParam = mqttParam; }