Пример #1
0
 /// <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);
 }
Пример #2
0
        /// <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, "异常消息重新处理出错");
                }
            }
        }
Пример #3
0
 /// <summary>
 /// 序列化
 /// </summary>
 /// <param name="t"></param>
 /// <returns></returns>
 public static string ToInnerString(this object t)
 {
     return(SmartSerializer.ToInnerString(t));
 }