예제 #1
0
        protected override void OnStart(string[] args)
        {
            log.Info("Start service");
            try
            {
                InitializeComponent();
                cancelTokenSource = new CancellationTokenSource();
                string rabbitMQServerName = ConfigurationManager.AppSettings["rabbitMQServerName"];
                workers        = new Worker[workerCount];
                rabbitMQServer = RabbitMQManager.GetRabbitMQServer(rabbitMQServerName);

                string connectToSQL        = @"Data Source=172.22.30.86,1455;Initial Catalog=QT_2;Persist Security Info=True;User ID=qt_vn;Password=@F4sJ=l9/ryJt9MT;connection timeout=200";
                string connectToConnection = @"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";
                CrawlerProductAdapter crawlerProductAdapter = new CrawlerProductAdapter(new SqlDb(connectToSQL));
                ProductAdapter        productAdapter        = new ProductAdapter(new SqlDb(connectToConnection));

                Encoding enc = new UTF8Encoding(true, true);
                for (int i = 0; i < workerCount; i++)
                {
                    log.InfoFormat("Start worker {i}", i.ToString());
                    var worker = new Worker(AddProductToSqlJobName, false, rabbitMQServer);
                    workers[i] = worker;
                    var  token      = this.cancelTokenSource.Token;
                    Task workerTask = new Task(() =>
                    {
                        worker.JobHandler = (downloadImageJob) =>
                        {
                            try
                            {
                                token.ThrowIfCancellationRequested();
                                string strData          = enc.GetString(downloadImageJob.Data);
                                JobRabbitAddProduct job = JsonConvert.DeserializeObject <JobRabbitAddProduct>(strData);
                                if (job.DateAdd == DateTime.MinValue)
                                {
                                    job.DateAdd = productAdapter.GetLastChangeOfProduct(job.ProductID);
                                }
                                crawlerProductAdapter.SaveLogAddProduct(job.ProductID, job.DetailUrl, job.IDCompnay, job.Name, job.DateAdd);
                                log.Info(string.Format("Log for {0}", strData));
                                return(true);
                            }
                            catch (OperationCanceledException opc)
                            {
                                log.Info("End worker");
                                return(false);
                            }
                        };
                        worker.Start();
                    }, token);
                    workerTask.Start();
                    log.InfoFormat("Worker {0} started", i);
                }
            }
            catch (Exception ex)
            {
                log.Error("Start error", ex);
                throw;
            }
        }
예제 #2
0
        public override void ProcessMessage(BasicDeliverEventArgs message)
        {
            bool   bOk = false;
            string mss = UTF8Encoding.UTF8.GetString(message.Body);

            JobRabbitAddProduct job = Newtonsoft.Json.JsonConvert.DeserializeObject <JobRabbitAddProduct>(mss);

            if (job != null)
            {
                bOk = sqlDb.RunQuery("insert into Product_LogsAddProduct (IDCompany, IDProduct, Name, Url) values (@IDCompany, @IDProduct, @Name, @Url)", CommandType.Text, new[]
                {
                    SqlDb.CreateParamteterSQL("IDCompany", job.IDCompnay, SqlDbType.BigInt),
                    SqlDb.CreateParamteterSQL("IDProduct", job.ProductID, SqlDbType.BigInt),
                    SqlDb.CreateParamteterSQL("Name", job.Name, SqlDbType.NVarChar),
                    SqlDb.CreateParamteterSQL("Url", job.DetailUrl, SqlDbType.NVarChar),
                });
            }
            this.GetChannel().BasicAck(message.DeliveryTag, true);
            this.log.Info(string.Format("Process job: {0} {1}", mss, bOk));
        }
예제 #3
0
        public void Start()
        {
            log.Info("Start LogAddProductToSqlServercs");
            var rabbitMQServer = RabbitMQManager.GetRabbitMQServer("rabbitMQ177");

            worker = new Worker("AddProductQueue.Product", false, rabbitMQServer);
            string connectToSQL        = @"Data Source=172.22.30.86,1455;Initial Catalog=QT_2;Persist Security Info=True;User ID=qt_vn;Password=@F4sJ=l9/ryJt9MT;connection timeout=200";
            string connectToConnection = @"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";
            CrawlerProductAdapter crawlerProductAdapter = new CrawlerProductAdapter(new SqlDb(connectToSQL));
            ProductAdapter        productAdapter        = new ProductAdapter(new SqlDb(connectToConnection));

            log.Info("Start consumer!");
            worker.JobHandler = (downloadImageJob) =>
            {
                log.Info("Get job from MQ");
                try
                {
                    Encoding            enc     = new UTF8Encoding(true, true);
                    string              strData = enc.GetString(downloadImageJob.Data);
                    JobRabbitAddProduct job     = JsonConvert.DeserializeObject <JobRabbitAddProduct>(strData);
                    if (job.DateAdd == DateTime.MinValue)
                    {
                        job.DateAdd = productAdapter.GetLastChangeOfProduct(job.ProductID);
                    }
                    crawlerProductAdapter.SaveLogAddProduct(job.ProductID, job.DetailUrl, job.IDCompnay, job.Name, job.DateAdd);
                    log.Info(string.Format("Log for {0}", strData));
                    return(true);
                }
                catch (Exception ex01)
                {
                    log.Error("Exception:", ex01);
                    return(true);
                }
            };
            worker.Start();
        }