using DSWeb.Common.Model; using log4net; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Quartz.Impl; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using Topshelf; namespace DSWeb.EventBus { public class EventProcessService : ServiceControl { private static ILog logger = LogManager.GetLogger("EventProcessService"); private ConnectionMultiplexer redis; public bool Start(HostControl hostControl) { // 开始具体的业务逻辑 logger.Debug("开始运行"); try { redis = ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["RedisServerAddr"]); redis.GetSubscriber().SubscribeAsync("EventMessage", (channel, value) => { try { var str = value.ToString(); logger.Debug($"收到消息:{str}"); var jobj = JObject.Parse(str); var strType = jobj.GetValue("type").ToString(); JObject jobjBody = jobj.GetValue("body") as JObject; if (Enum.TryParse(strType, out EventMessageType type)) { EventProcessChain.ProcessEvent(type, jobjBody); } else { logger.Error($"不支持的消息类型:{strType}"); } } catch (JsonException jex) { logger.Error($"json参数错误:{jex.Message}"); logger.Error(jex.StackTrace); } catch (Exception ex) { logger.Error(ex.Message); logger.Error(ex.StackTrace); } }); } catch (Exception ex) { logger.Error("启动出错:"); logger.Error(ex.Message); logger.Error(ex.StackTrace); } //账单中心东胜7回写接收状态 MqProcBillcenterDs7Feedback.DoProcess(); //大简云动作日志 MqProcActionLog.DoProcess(); //账单中心东胜6回写接收状态 MqProcBillcenterDs6Feedback.DoProcess(); return true; } public bool Stop(HostControl hostControl) { // 结束 logger.Debug("停止运行"); if (redis.IsConnected) { redis.GetSubscriber().UnsubscribeAll(); redis.Close(); } MqProcBillcenterDs7Feedback.StopProcess(); MqProcActionLog.StopProcess(); return true; } } }