/// <summary> /// 同步器 /// </summary> /// <param name="msg"></param> /// <param name="indexName"></param> /// <returns></returns> public ISynchronizer ResolveSynchronizer(DataChangeMsg msg, string indexName) { string name = (msg.DbConnectionKey + msg.TableName + indexName).ToLower(); if (_iocContainer.IsRegisteredWithName(name, typeof(ISynchronizer))) { return(_iocContainer.ResolveNamed <ISynchronizer>(name)); } else { return(new DefaultSynchronizer()); } }
/// <summary> /// 同步器 /// </summary> /// <param name="msg"></param> /// <param name="log"></param> /// <param name="config"></param> /// <returns></returns> public bool SyncData(DataChangeMsg msg, ILog log, IndexSyncConfig config) { string msgstr = JsonConvert.SerializeObject(msg); try { string indexName = config.IndexName.ToLower(); if (msg.Type == "D") { //删除 log.Info("开始删除数据:" + msgstr); //var path = new DocumentPath<TEs>(msg.PkValue); var path = GetDocumentPath(msg, log); EsClient.Delete(path, n => n.Index(indexName)); log.Info("删除数据完成:" + msgstr); return(true); } //获取新数据 log.Info("开始获取新数据:" + msgstr); //var infos = DataTrackDl.GetDataChangeMsgs<TSql>(msg); var infos = GetAllList(msg, log); //转换es数据 var esInfos = TSqltoTEs(infos, log); //同步 log.Info("开始同步数据:" + msgstr); if (infos != null && infos.Count > 0) { //同步到es var result = EsClient.IndexMany(esInfos, indexName); if (result.ServerError != null) { log.Error("索引失败:" + result.ServerError.Error.Reason); return(false); } log.Info("同步数据完成:" + msgstr); } return(true); } catch (Exception ex) { log.Error("同步数据失败:" + msgstr, ex); } return(false); }
/// <summary> /// 获取变更后的新数据 /// </summary> /// <param name="msg"></param> /// <returns></returns> public static List <T> GetDataChangeMsgs <T>(DataChangeMsg msg) { string connectionString = SqlUtils.GetConnString(msg.DbConnectionKey); string sql = string.Format(@"SELECT * FROM {0} WHERE {1}={2}", msg.TableName, msg.PkName, msg.PkValue); List <T> list; using (IDbConnection cnn = SqlUtils.GetSqlConnection(connectionString)) { list = cnn.Query <T>(sql, null, null, true, null, CommandType.Text).ToList(); } return(list); }
/// <summary> /// 获取es文档地址 /// </summary> /// <param name="msg"></param> /// <param name="log"></param> /// <returns></returns> public abstract DocumentPath <TEs> GetDocumentPath(DataChangeMsg msg, ILog log);
/// <summary> /// 获取所有数据 /// </summary> /// <param name="msg"></param> /// <param name="log"></param> /// <returns></returns> public abstract List <TSql> GetAllList(DataChangeMsg msg, ILog log);
public override DocumentPath <VendorInfo> GetDocumentPath(DataChangeMsg msg, ILog log) { return(new DocumentPath <VendorInfo>(msg.PkValue)); }
public override List <VendorInfo> GetAllList(DataChangeMsg msg, ILog log) { return(VendorDl.GetVendorByVendorId(long.Parse(msg.PkValue))); }
public override DocumentPath <DealerMainBrandInfo> GetDocumentPath(DataChangeMsg msg, ILog log) { throw new NotImplementedException(); }
public override List <DealerMainBrandInfo> GetAllList(DataChangeMsg msg, ILog log) { throw new NotImplementedException(); }
public override DocumentPath <ArticleVModel> GetDocumentPath(DataChangeMsg msg, ILog log) { return(new DocumentPath <ArticleVModel>(msg.PkValue)); }
public override List <ArticleVModel> GetAllList(DataChangeMsg msg, ILog log) { return(new List <ArticleVModel> { HGShare.DataProvider.Articles.GetArticleVModel(long.Parse(msg.PkValue)) }); }
public override DocumentPath <VendorAndCarSerialPromotionNews> GetDocumentPath(DataChangeMsg msg, ILog log) { return(new DocumentPath <VendorAndCarSerialPromotionNews>(msg.PkValue)); }
public override List <VendorAndCarSerialPromotionNews> GetAllList(DataChangeMsg msg, ILog log) { return(DataTrackDl.GetDataChangeMsgs <VendorAndCarSerialPromotionNews>(msg)); }
public override List <CommentVModel> GetAllList(DataChangeMsg msg, ILog log) { return(new List <CommentVModel> { HGShare.DataProvider.Comments.GetComment(long.Parse(msg.PkValue)) }); }
public bool SyncData(DataChangeMsg msg, ILog log, IndexSyncConfig config) { log.Error("未实现同步方法的消息\n" + JsonConvert.SerializeObject(msg)); return(true); }