예제 #1
0
        public virtual async Task CanRunQueueJobWithLockFail() {
            const int workItemCount = 10;
            const int allowedLockCount = 5;
            using (var queue = GetSampleWorkItemQueue(retries: 3, retryDelay: TimeSpan.Zero)) {
                await queue.DeleteQueueAsync();
            
                var enqueueTask = Run.InParallel(workItemCount, async index => {
                    await queue.EnqueueAsync(new SampleQueueWorkItem {
                        Created = SystemClock.UtcNow,
                        Path = "somepath" + index
                    });
                });

                var lockProvider = new ThrottlingLockProvider(new InMemoryCacheClient(), allowedLockCount, TimeSpan.FromDays(1), Log);
                var job = new SampleQueueJobWithLocking(queue, null, lockProvider, Log);
                await SystemClock.SleepAsync(10);
                await Task.WhenAll(job.RunUntilEmptyAsync(), enqueueTask);

                var stats = await queue.GetQueueStatsAsync();
                Assert.Equal(0, stats.Queued);
                Assert.Equal(workItemCount, stats.Enqueued);
                Assert.Equal(allowedLockCount, stats.Completed);
                Assert.Equal(allowedLockCount * 4, stats.Abandoned);
                Assert.Equal(allowedLockCount, stats.Deadletter);
            }
        }
예제 #2
0
 public ThrottledJob(ICacheClient client, ILoggerFactory loggerFactory = null) : base(loggerFactory) {
     _locker = new ThrottlingLockProvider(client, 1, TimeSpan.FromMilliseconds(100), loggerFactory);
 }
 public ElasticSearchConfiguration(ICacheClient cacheClient, IQueue<WorkItemData> workItemQueue) {
     _lockProvider = new ThrottlingLockProvider(cacheClient, 1, TimeSpan.FromMinutes(1));
     _workItemQueue = workItemQueue;
 }
예제 #4
0
 public ThrottledJob(ICacheClient client) {
     _locker = new ThrottlingLockProvider(client, 1, TimeSpan.FromMilliseconds(100));
 }