public void Dequeue_ReturnsFetchedJob_FromOtherQueues_IfFirstAreEmpty() { RabbitMqUtils.EnqueueJobId("queue-2", "job-id"); using (var queue = CleanRabbitMqQueueAttribute.GetMessageQueue("queue-1", "queue-2")) { var fetchedJob = queue.Dequeue(new[] { "queue-1", "queue-2" }, _token); Assert.Equal("job-id", fetchedJob.JobId); } }
public void Dequeue_ReturnsFetchedJob_WithJobId() { RabbitMqUtils.EnqueueJobId("my-queue", "job-id"); using (var queue = CleanRabbitMqQueueAttribute.GetMessageQueue("my-queue")) { var fetchedJob = queue.Dequeue(new[] { "my-queue" }, _token); fetchedJob.RemoveFromQueue(); Assert.Equal("job-id", fetchedJob.JobId); } }
public void GetEnqueuedAndFetchedCount_ReturnsCorrectCounters() { RabbitMqUtils.EnqueueJobId("my-queue", "1"); RabbitMqUtils.EnqueueJobId("my-queue", "2"); RabbitMqUtils.EnqueueJobId("my-queue", "3"); var api = CreateMonitoringApi(); var result = api.GetEnqueuedAndFetchedCount("my-queue"); Assert.Equal(3, result.EnqueuedCount); Assert.Null(result.FetchedCount); }
public void GetEnqueuedJobIds_ReturnsCorrectResult() { for (var i = 1; i <= 10; i++) { RabbitMqUtils.EnqueueJobId("my-queue", i.ToString()); } var api = CreateMonitoringApi(); var result = api.GetEnqueuedJobIds("my-queue", 3, 2).ToArray(); Assert.Equal(2, result.Length); Assert.Equal(4, result[0]); Assert.Equal(5, result[1]); }
public void DisposeWithoutRemoval_OnFetchedJob_ReturnsTheJobToTheQueue() { // Arrange RabbitMqUtils.EnqueueJobId("my-queue", "job-id"); using (var queue = CleanRabbitMqQueueAttribute.GetMessageQueue("my-queue")) { // Act var fetchedJob = queue.Dequeue(new[] { "my-queue" }, _token); fetchedJob.Dispose(); // Assert var jobId = RabbitMqUtils.DequeueJobId("my-queue", TimeSpan.FromSeconds(5)); Assert.Equal("job-id", jobId); } }
public void DisposeWithoutRemoval_OnFetchedJob_CanBeDequeuedAgain() { // Arrange RabbitMqUtils.EnqueueJobId("my-queue", "job-id"); using (var queue = CleanRabbitMqQueueAttribute.GetMessageQueue("my-queue")) { // Act var fetchedJob = queue.Dequeue(new[] { "my-queue" }, _token); fetchedJob.Dispose(); // Assert var newFetchedJob = queue.Dequeue(new[] { "my-queue" }, _token); Assert.Equal("job-id", newFetchedJob.JobId); } }
public void Dequeue_MakesJobInvisibleForOtherFetchers() { // Arrange RabbitMqUtils.EnqueueJobId("my-queue", "job-id9"); using (var queue = CleanRabbitMqQueueAttribute.GetMessageQueue("my-queue")) { // Act var fetchedJob = queue.Dequeue(new[] { "my-queue" }, _token); // Assert Assert.NotNull(fetchedJob); var exception = Assert.Throws <TimeoutException>( () => RabbitMqUtils.DequeueJobId("my-queue", TimeSpan.FromSeconds(1))); Assert.Equal(exception.Message, "my-queue"); } }
public void RemoveFromQueue_OnFetchedJob_RemovesTheJobCompletely() { // Arrange RabbitMqUtils.EnqueueJobId("my-queue", "job-id"); using (var queue = CleanRabbitMqQueueAttribute.GetMessageQueue("my-queue")) { // Act using (var fetchedJob = queue.Dequeue(new[] { "my-queue" }, _token)) { fetchedJob.RemoveFromQueue(); } // Assert var exception = Assert.Throws <TimeoutException>( () => RabbitMqUtils.DequeueJobId("my-queue", TimeSpan.FromSeconds(1))); Assert.Equal(exception.Message, "my-queue"); } }
public override async Task Job(DateTime?datetime = null) { bool finish = true; int page = 836; List <ECSkuRelation> skuRelation = new List <ECSkuRelation>(); using (var uow = _uowProvider.CreateUnitOfWork()) { var repository = uow.GetRepository <ECSkuRelation>(); //try //{ // await repository.DeleteAll(); // await uow.SaveChangesAsync(); //} //catch (Exception ex) //{ // log.Error($"初始化Sku映射信息,删除Sku映射信息异常:{ex.Message}"); // throw ex; //} EBGetSkuRelationReqModel reqModel = new EBGetSkuRelationReqModel(); RelationCondition condition = new RelationCondition(); condition.AddTimeStart = "2018-01-01"; condition.AddTimeEnd = "2020-05-26"; while (finish) { reqModel.Page = page; reqModel.PageSize = 1000; reqModel.Condition = condition; EBGetSkuRelationRequest request = new EBGetSkuRelationRequest(login.Username, login.Password, reqModel); var response = await request.Request(); System.Diagnostics.Debug.WriteLine($"第{page}页获取成功"); if (response.Body.Count == 1000) { foreach (var item in response.Body) { try { var m = Mapper <EC_SkuRelation, ECSkuRelation> .Map(item); m.CreateTime = DateTime.Parse(reqModel.Condition.AddTimeEnd); skuRelation.Add(m); } catch (Exception ex) { RabbitMqUtils.pushMessage(new LogPushModel("Xin", "EcGetSkuRelationInit", "ERROR", "Sku映射转换实体类出现异常;" + ex.Message, reqModel)); System.Diagnostics.Debug.WriteLine($"Sku映射转换实体类出现异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); throw ex; } } } else { finish = false; foreach (var item in response.Body) { try { var m = Mapper <EC_SkuRelation, ECSkuRelation> .Map(item); m.CreateTime = DateTime.Parse(reqModel.Condition.AddTimeEnd); skuRelation.Add(m); } catch (Exception ex) { RabbitMqUtils.pushMessage(new LogPushModel("Xin", "EcGetSkuRelationInit", "ERROR", "Sku映射转换实体类出现异常;" + ex.Message, reqModel)); System.Diagnostics.Debug.WriteLine($"Sku映射转换实体类出现异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); throw ex; } } try { await repository.BulkInsertAsync(skuRelation, x => x.IncludeGraph = true); uow.BulkSaveChanges(); skuRelation.Clear(); } catch (Exception ex) { RabbitMqUtils.pushMessage(new LogPushModel("Xin", "EcGetSkuRelationInit", "ERROR", "入库单信息,写入数据库异常;" + ex.Message, reqModel)); System.Diagnostics.Debug.WriteLine($"入库单信息,写入数据库异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); throw ex; } } if (page % 5 == 0 && skuRelation.Count > 0) { try { System.Diagnostics.Debug.WriteLine($"本次写入{skuRelation.Count}条"); await repository.BulkInsertAsync(skuRelation, x => x.IncludeGraph = true); uow.BulkSaveChanges(); skuRelation.Clear(); } catch (Exception ex) { RabbitMqUtils.pushMessage(new LogPushModel("Xin", "EcGetSkuRelationInit", "ERROR", "入库单信息,写入数据库异常;" + ex.Message, reqModel)); System.Diagnostics.Debug.WriteLine($"入库单信息,写入数据库异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); throw ex; } } page++; } //response.TotalCount = response.TotalCount == null ? "1" : response.TotalCount; //int pageNum = (int)Math.Ceiling(long.Parse(response.TotalCount) * 1.0 / 1000); //for (int page = 1; page < pageNum; page++) //{ // reqModel.Page = page; // reqModel.PageSize = 1000; // try // { // System.Diagnostics.Debug.WriteLine($"Sku映射,开始拉取,开始时间:{DateTime.Now};时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;"); // request = new EBGetSkuRelationRequest(login.Username, login.Password, reqModel); // response =await request.Request(); // foreach (var item in response.Body) // { // try // { // var m = Mapper<EC_SkuRelation, ECSkuRelation>.Map(item); // m.CreateTime = DateTime.Parse(reqModel.Condition.AddTimeEnd); // skuRelation.Add(m); // } // catch (Exception ex) // { // System.Diagnostics.Debug.WriteLine($"Sku映射转换实体类出现异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); // throw ex; // } // } // } // catch (Exception ex) // { // System.Diagnostics.Debug.WriteLine($"Sku映射接口获取出现异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); // throw ex; // } // try // { // System.Diagnostics.Debug.WriteLine($"拉取结束&开始写入时间时间: { DateTime.Now}"); // await repository.BulkInsertAsync(skuRelation, x => x.IncludeGraph = true); // uow.BulkSaveChanges(); // skuRelation.Clear(); // System.Diagnostics.Debug.WriteLine($"写入完成时间: { DateTime.Now}"); // } // catch (Exception ex) // { // System.Diagnostics.Debug.WriteLine($"入库单信息,写入数据库异常:时间区间{reqModel.Condition.AddTimeStart.ToString()}TO{reqModel.Condition.AddTimeEnd.ToString()}第{reqModel.Page}页;异常信息:{ex.Message}"); // throw ex; // } //} //Parallel.ForEach(pages, new ParallelOptions { MaxDegreeOfParallelism = 1 }, page => mulitSaveAsync(reqModel,page)); } }