/// <summary> /// 准备 /// </summary> /// <param name="service">当前服务</param> /// <param name="message">当前消息</param> /// <param name="tag">扩展信息</param> /// <returns></returns> async Task <bool> IMessageMiddleware.Prepare(IService service, IInlineMessage message, object tag) { if (tag is Task) { return(true);//本地不序列化 } try { var file = Path.Combine(path, $"{message.ID}.msg"); if (!File.Exists(file)) { await File.WriteAllTextAsync(file, SmartSerializer.SerializeMessage(message)); } } catch { } return(true); }
/// <summary> /// 启动 /// </summary> async Task ILifeFlow.Open() { var files = IOHelper.GetAllFiles(path, "*.msg"); if (files.Count == 0) { return; } ILogger logger = DependencyHelper.LoggerFactory.CreateLogger <ReConsumerMiddleware>(); logger.Information($"重新消费错误消息.共{files.Count}个"); var service = new ZeroService { Receiver = new EmptyReceiver() }; await Task.Yield(); foreach (var file in files) { if (!ZeroAppOption.Instance.IsRuning) { return; } await Task.Delay(10); try { var json = File.ReadAllText(file); if (SmartSerializer.TryToMessage(json, out var message)) { service.ServiceName = message.Service; await MessageProcessor.OnMessagePush(service, message, true, null); } } catch (Exception e) { logger.Exception(e, "异常消息重新处理出错"); } } }
/// <summary> /// 序列化 /// </summary> /// <param name="t"></param> /// <returns></returns> public static string ToInnerString(this object t) { return(SmartSerializer.ToInnerString(t)); }