/// <summary> /// 重试处理 /// 应该由Retryer线程调用 /// </summary> /// <param name="arn">重试节点</param> /// <returns></returns> public bool RetryProcess(RetryNode arn) { ISrcUrl isu = arn.SrcUrl; AqiParam ap = arn.Param; byte[] data = null; try { if (isu is ISrcUrlParam) { ISrcUrlParam isup = isu as ISrcUrlParam; data = isup.GetData(ap); } else { data = isu.GetData(); } } catch (Exception ex) { AqiManage.Remind.Log_Error("数据重试失败,再入重试队列", new string[] { this.name, arn.Name, isu.Name }); this.ar.PutAgain(arn, ex); return(false); } this.SaveProcess(data, isu, ap); arn.Reset(); return(true); }
/// <summary> /// 读取参数列表 /// 从 SrcUrl 接口 /// </summary> /// <param name="iParseSrcUrlParam">实现IParseSrcUrlParam的SrcUrl</param> /// <param name="relySrcUrl">参数来源SrcUrl</param> /// <returns></returns> public static List <AqiParam> CreateListFormSrcUrl(IParseSrcUrlParam iParseSrcUrlParam, ISrcUrl relySrcUrl) { List <AqiParam> listParam = new List <AqiParam>(); //TODO 应该将 runner的处理过程公开,交由Runner处理,公用代码,考虑将Process处理函数静态化 try { if (relySrcUrl is ISrcUrlParam) { ISrcUrlParam isup = relySrcUrl as ISrcUrlParam; List <AqiParam> list = null; if (isup is ICacheParam) { ICacheParam icp = isup as ICacheParam; if (icp.IsParamsExpired()) { icp.LoadParams(); } list = icp.FilterParams(); } else { list = isup.EnumParams(); } if ((list == null) || (list.Count == 0)) { throw new ParamException("缺少参数"); } foreach (AqiParam ap in list) { byte[] data = data = isup.GetData(ap); List <AqiParam> aps = iParseSrcUrlParam.ParseParam(data); listParam.AddRange(aps); } } else { byte[] data = relySrcUrl.GetData(); List <AqiParam> aps = iParseSrcUrlParam.ParseParam(data); listParam.AddRange(aps); } } catch (System.Exception ex) { throw new ParamException("参数创建错误", ex); } return(listParam); }
/// <summary> /// 获取处理 /// </summary> /// <param name="isu">数据接口</param> /// <param name="sugt">定时器</param> public void GetProcess(ISrcUrl isu, SrcUrlGroupTimer sugt) { byte[] data = null; try { data = isu.GetData(); } catch (Exception exception) { AqiManage.Remind.Log_Error("数据获取失败,进入重试队列", new string[] { this.name, sugt.Name, isu.Name }); this.ar.PutNew(this.name, isu, null, exception); return; } this.SaveProcess(data, isu, null); }