public void Run() { Task.Factory.StartNew(() => { SqlDb sqlDb = new QT.Entities.Data.SqlDb(@"Data Source=42.112.28.93;Initial Catalog=QT_2;Persist Security Info=True;User ID=wss_price;Password=HzlRt4$$axzG-*UlpuL2gYDu;connection timeout=200"); QT.Moduls.CrawlerProduct.Cache.CacheProductInfo cacheProductInfo = new QT.Moduls.CrawlerProduct.Cache.CacheProductInfo(sqlDb); while (true) { BasicGetResult result = this.GetMessage(); if (result != null) { string str = System.Text.Encoding.UTF8.GetString(result.Body); if (str != "") { MssRefreshCacheProductInfo job = MssRefreshCacheProductInfo.FromJSON(str); log.Info(string.Format("Get Message For Company:{0} {1}", job.CompanyID, job.Domain)); RedisCacheProductInfo rediscacheProductForCompany = RedisCacheProductInfo.Instance(); int ProductCache = cacheProductInfo.RefreshAllCacheAllProduct(job.CompanyID); log.Info(string.Format("Company:{0} NumberProductCache:{1}", job.CompanyID, job.Domain)); } } this.tokenStop.WaitHandle.WaitOne(10000); } }); }
protected override void OnStart(string[] args) { log.Info("Start service"); try { InitializeComponent(); cancelTokenSource = new CancellationTokenSource(); Server.LogConnectionString = ConfigurationManager.AppSettings["LogConnectionString"]; QT.Entities.Server.ConnectionString = connectionString; string rabbitMQServerName = ConfigurationManager.AppSettings["rabbitMQServerName"]; workers = new Worker[workerCount]; rabbitMQServer = RabbitMQManager.GetRabbitMQServer(rabbitMQServerName); for (int i = 0; i < workerCount; i++) { log.InfoFormat("Start worker {i}", i.ToString()); var worker = new Worker(refreshCacheProductInfoJobName, false, rabbitMQServer); workers[i] = worker; var token = this.cancelTokenSource.Token; Task workerTask = new Task(() => { var db = new QT.Entities.Data.SqlDb(this.connectionString); QT.Moduls.CrawlerProduct.Cache.CacheProductInfo cacheProductInfo = new QT.Moduls.CrawlerProduct.Cache.CacheProductInfo(db); worker.JobHandler = (jobMss) => { try { token.ThrowIfCancellationRequested(); QT.Entities.CrawlerProduct.RabbitMQ.MssRefreshCacheProductInfo mss = QT.Entities.CrawlerProduct.RabbitMQ.MssRefreshCacheProductInfo.FromJSON(QT.Entities.Common.ByteToString(jobMss.Data)); log.InfoFormat("Start run refresh company {0} : {1}", mss.CompanyID, mss.Domain); RedisCacheProductInfoAdapter rediscacheProductForCompany = RedisCacheProductInfoAdapter.Instance(); int numberProduct = cacheProductInfo.ReloadCacheForCompany(mss.CompanyID, mss.Domain); log.InfoFormat("End refresh company {0} : {1} {2} products", mss.CompanyID, mss.Domain, numberProduct); return(true); } catch (OperationCanceledException opc) { log.Info("End worker"); return(true); } }; worker.Start(); }, token); workerTask.Start(); log.InfoFormat("Worker {0} started", i); } } catch (Exception ex) { log.Error("Start error", ex); throw; } }