/// <summary> /// 获取消息的处理方法 /// </summary> /// <param name="messageType"></param> /// <returns></returns> public AsyncMessageHandleMethod GetHandle(int messageType) { AsyncMessageHandleMethod handle = null; this.map.TryGetValue(messageType, out handle); return(handle); }
/// <summary> /// /// </summary> /// <param name="define"></param> private void Register(AssemblyClassMethodAndAttribute define) { var attribute = define.Attribute as RegisterAsyncMessageHandleAttribute; var type = attribute.MessageType; if (attribute.MessageContentType == null) { attribute.MessageContentType = define.Method.GetParameters()[0].ParameterType; } map[type] = new AsyncMessageHandleMethod(define); }
/// <summary> /// 处理消息 /// </summary> /// <param name="loopCount"></param> /// <returns></returns> public void Handle(int loopCount = 0) { if (loopCount == 0) { Setup((Assembly)null); } List <AbstractAsyncMessage> messageList = null; using (var context = new TDbContext()) { messageList = context.Database.SqlQuery <AbstractAsyncMessage>(this.querySql).ToList(); var asyncMessageHandleDefineList = context.Database.SqlQuery <AbstractAsyncMessageHandleDefine>(queryMessageHandleDefineSql).ToList(); Setup(asyncMessageHandleDefineList); }; this.handleLog?.Invoke(string.Format("第{0}处理异步消息处理,查询到待处理消息:{1}", loopCount, messageList.Count)); foreach (var message in messageList) { try { AsyncMessageHandleMethod handle = GetHandle(message.MessageType); if (handle == null) { this.errorLog?.Invoke(string.Format("未定义 {0} 类型消息处理的函数", message.MessageType.ToString())); continue; } if (handle.Handle(message)) { this.handleLog?.Invoke(string.Format("已经处理消息:{0}-{1}", message.Id, message.MessageContent)); DeleteAsyncMessage(message); //删除某一个异步消息 } else { IncrementAsyncMessageHandleTimes(message); } } catch (Exception e) { this.errorLog?.Invoke(string.Format("{0}\n{1}\n{2}", e.Message, e.StackTrace, message)); IncrementAsyncMessageHandleTimes(message); } } }