Пример #1
0
        public Task <bool> Handle(JobMessage <TestJob> request, CancellationToken cancellationToken)
        {
            var data = request.Data;

            _logger.LogInformation("TestJobHandler消费;Topic:{Topic},JobId:{JobId},Body:{Body}", request.Topic,
                                   data.JobId, data.Body);

            DelayedRedisHelper.RPush(nameof(TestJobHandler), data.JobId);
            return(Task.FromResult(true));
        }
Пример #2
0
        public async Task<DateTime?> GetNextJobExecTimeAsync(string topic)
        {
            var items = await DelayedRedisHelper.ZRangeByScoreWithScoresAsync<string>($"{queuePrefix}{topic}", decimal.Zero,
                decimal.MaxValue
                , 1);

            if (items == null || items.Length == 0)
                return null;

            return DateTimeOffset.FromUnixTimeSeconds(long.Parse(items[0].score.ToString("0000"))).LocalDateTime;
        }
        public static void AddDealyQueueService(this IServiceCollection services, string delayQueRedis)
        {
            DelayedRedisHelper.Initialization(new CSRedisClient(delayQueRedis));


            services.AddSingleton(typeof(IDelayer <>), typeof(Delayer <>));

            services.AddSingleton(typeof(IDelayedMessageProcessor <>), typeof(DelayedMessageProcessor <>));


            services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies());
        }
        public static void AddDealyQueueService(this IServiceCollection services, IConfiguration configuration)
        {
            DelayedRedisHelper.Initialization(new CSRedisClient(configuration.GetSection("DelayQueue:Redis").Value));


            services.AddSingleton(typeof(IDelayer <>), typeof(Delayer <>));

            services.AddSingleton(typeof(IDelayedMessageProcessor <>), typeof(DelayedMessageProcessor <>));


            services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies());
        }
Пример #5
0
        public async Task should_consume_delay_job()
        {
            DelayedRedisHelper.Del(nameof(TestJobHandler));

            var delayer = _serviceProvider.GetRequiredService <IDelayer <TestJob> >();

            for (int j = 0; j < 100; j++)
            {
                await delayer.PutDealyJob(
                    new TestJob(TimeSpan.FromSeconds(1), "abcde====" + j, j.ToString()));
            }

            Thread.Sleep(1000 * 20);
            var num = DelayedRedisHelper.LLen(nameof(TestJobHandler));

            _testOutputHelper.WriteLine("消费:" + num);
            Assert.True(num == 100);
            _testOutputHelper.WriteLine("ok");
        }
Пример #6
0
        public async Task shou_add_to_bucket()
        {
            var jobid = Guid.NewGuid().ToString("N");

            var delayer = _serviceProvider.GetRequiredService <IDelayer <TestJob> >();


            await delayer.PutDealyJob(
                new TestJob(TimeSpan.FromSeconds(10), "abcde====" + jobid, jobid));

            var jobpool = await new JobPool <TestJob>().GetJobAsync(jobid);

            Assert.NotNull(jobpool);
            Assert.True(jobpool.JobId == jobid);
            var bucketJob = await new Bucket().GetNextJobExecTimeAsync(nameof(TestJob));

            Assert.True(bucketJob != null);

            await new JobPool <TestJob>().DelJobAsync(jobid);
            await new Bucket().RemoveJobAsync(nameof(TestJob), jobid);

            DelayedRedisHelper.Del(nameof(TestJobHandler));
        }
Пример #7
0
 public Task<long> DelJobAsync(string jobId)
 {
     return DelayedRedisHelper.DelAsync($"{_prefix}{jobId}");
 }
Пример #8
0
 public Task<T> GetJobAsync(string jobId)
 {
     return DelayedRedisHelper.GetAsync<T>($"{_prefix}{jobId}");
 }
Пример #9
0
 public Task<bool> PutJobAsync(T job)
 {
     //检验jobid是否全局唯一?
     return DelayedRedisHelper.SetAsync($"{_prefix}{job.JobId}", job);
 }
Пример #10
0
 public Task<long> RemoveJobAsync(string topic, string jobId)
 {
     return DelayedRedisHelper.ZRemAsync($"{queuePrefix}{topic}", jobId);
 }
Пример #11
0
 public Task<string[]> GetExpireJobsAsync(string topic, long limit)
 {
     return DelayedRedisHelper.ZRangeByScoreAsync<string>($"{queuePrefix}{topic}", decimal.Zero,
         GetDelaySeconds(TimeSpan.Zero), limit);
 }
Пример #12
0
        public Task<long> PushJobToBucketAsync(string topic, string jobId, TimeSpan delay)
        {
            var delaySec = GetDelaySeconds(delay);

            return DelayedRedisHelper.ZAddAsync($"{queuePrefix}{topic}", (delaySec, jobId));
        }
Пример #13
0
 public Task PushToReadyQueue(string topic, T job)
 {
     return(DelayedRedisHelper.RPushAsync($"{queuePrefix}{topic}", job));
 }
Пример #14
0
        public Task <T> GetJobFromReadyQueue(string topic, int timeoutSeconds)
        {
            var data = DelayedRedisHelper.BLPop <T>(timeoutSeconds, $"{queuePrefix}{topic}");

            return(Task.FromResult(data));
        }