/// <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());
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
 /// <summary>
 /// 获取es文档地址
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="log"></param>
 /// <returns></returns>
 public abstract DocumentPath <TEs> GetDocumentPath(DataChangeMsg msg, ILog log);
Example #5
0
 /// <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)));
 }
Example #8
0
 public override DocumentPath <DealerMainBrandInfo> GetDocumentPath(DataChangeMsg msg, ILog log)
 {
     throw new NotImplementedException();
 }
Example #9
0
 public override List <DealerMainBrandInfo> GetAllList(DataChangeMsg msg, ILog log)
 {
     throw new NotImplementedException();
 }
Example #10
0
 public override DocumentPath <ArticleVModel> GetDocumentPath(DataChangeMsg msg, ILog log)
 {
     return(new DocumentPath <ArticleVModel>(msg.PkValue));
 }
Example #11
0
 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));
 }
Example #14
0
 public override List <CommentVModel> GetAllList(DataChangeMsg msg, ILog log)
 {
     return(new List <CommentVModel> {
         HGShare.DataProvider.Comments.GetComment(long.Parse(msg.PkValue))
     });
 }
Example #15
0
        public bool SyncData(DataChangeMsg msg, ILog log, IndexSyncConfig config)
        {
            log.Error("未实现同步方法的消息\n" + JsonConvert.SerializeObject(msg));

            return(true);
        }