Example #1
0
        public void CanRunMultipleQueueJobs()
        {
            const int jobCount = 5;
            const int workItemCount = 1000;
            var metrics = new InMemoryMetricsClient();
            metrics.StartDisplayingStats(TimeSpan.FromMilliseconds(100), _writer);

            var queues = new List<RedisQueue<SampleQueueWorkItem>>();
            for (int i = 0; i < jobCount; i++)
            {
                var q = new RedisQueue<SampleQueueWorkItem>(SharedConnection.GetMuxer(), retries: 3, retryDelay: TimeSpan.FromSeconds(1));
                q.AttachBehavior(new MetricsQueueBehavior<SampleQueueWorkItem>(metrics, "test"));
                queues.Add(q);
            }

            Task.Run(() =>
            {
                Parallel.For(0, workItemCount, i => {
                    var queue = queues[RandomData.GetInt(0, 4)];
                    queue.Enqueue(new SampleQueueWorkItem { Created = DateTime.Now, Path = RandomData.GetString() });
                });
            });

            Parallel.For(0, jobCount, index =>
            {
                var queue = queues[index];
                var job = new SampleQueueJob(queue, metrics);
                job.RunUntilEmpty();
            });

            metrics.DisplayStats(_writer);
        }
Example #2
0
        public void ProcessInbox()
        {
            var       redis = new Redis(keyNameSpace: "RedisQueueTests");
            var       queue = new RedisQueue <string>(redis, "CouldSendAndReceiveMessages", timeout: 5000);
            const int n     = 10000;

            var sw = new Stopwatch();

            sw.Start();


            var consumer = Task.Run(async() => {
                var c = 0;
                while (true)
                {
                    var message = await queue.TryReceiveMessage();
                    c++;
                    if (c % 10000 == 0)
                    {
                        Console.WriteLine(c);
                    }
                    //if (message.OK) { Console.WriteLine(message.Value); }
                    if (message.Ok)
                    {
                        await queue.TryDeleteMessage(message.DeleteHandle);
                    }
                }
            });


            consumer.Wait();
            sw.Stop();
            Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
            //Thread.Sleep(2000);
        }
Example #3
0
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null, int deadLetterMaxItems = 100, bool runQueueMaintenance = true)
        {
            var queue = new RedisQueue <SimpleWorkItem>(SharedConnection.GetMuxer(), workItemTimeout: workItemTimeout, retries: retries, retryDelay: retryDelay, deadLetterMaxItems: deadLetterMaxItems, runMaintenanceTasks: runQueueMaintenance);

            Logger.Debug().Message($"Queue Id: {queue.QueueId}").Write();
            return(queue);
        }
Example #4
0
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null, int deadLetterMaxItems = 100)
        {
            var queue = new RedisQueue <SimpleWorkItem>(SharedConnection.GetMuxer(), workItemTimeout: workItemTimeout, retries: retries, retryDelay: retryDelay, deadLetterMaxItems: deadLetterMaxItems);

            Debug.WriteLine(String.Format("Queue Id: {0}", queue.QueueId));
            return(queue);
        }
Example #5
0
        public override IServiceProvider Bootstrap()
        {
            var container = new Container();

            container.Options.AllowOverridingRegistrations = true;

            container.Register <IAmADependency, MyDependency>();
            var muxer = ConnectionMultiplexer.Connect("localhost");

            container.RegisterSingleton(muxer);

            var q1 = new RedisQueue <PingRequest>(muxer);
            var q2 = new RedisQueue <PingRequest>(muxer);

            container.RegisterSingleton <IQueue <PingRequest> >(() => q2);

            Task.Run(async() => {
                var startDate = DateTime.Now;
                while (startDate.AddSeconds(30) > DateTime.Now)
                {
                    Console.WriteLine("Enqueueing ping.");
                    await q1.EnqueueAsync(new PingRequest {
                        Data = "Hi"
                    }).AnyContext();
                    await Task.Delay(RandomData.GetInt(100, 1000)).AnyContext();
                }
            }).AnyContext();

            return(container);
        }
Example #6
0
        private static void Queue()
        {
            var       redis = new Redis(keyNameSpace: "RedisQueueTests");
            var       queue = new RedisQueue <string>(redis, "CouldSendAndReceiveMessages", timeout: 5000);
            const int n     = 10000;

            var sw = new Stopwatch();

            sw.Start();
            var producer1 = Task.Run(async() => {
                //await Task.Delay(1000);
                for (var i = 0; i < n; i++)
                {
                    await queue.TrySendMessage(i.ToString());
                    //await queue.TrySendMessage(new String('x', i*1));

                    //await Task.Delay(50);
                }
            });

            //var producer2 = Task.Run(async () => {
            //    for (var i = n; i < 2*n; i++) {
            //        await queue.TrySendMessage(i.ToString());
            //        //await Task.Delay(50);
            //    }
            //});

            var consumer = Task.Run(async() => {
                var c = 0;
                while (true)
                {
                    //await Task.Delay(100);
                    QueueReceiveResult <string> message = default(QueueReceiveResult <string>);
                    try {
                        message = await queue.TryReceiveMessage();
                    } catch (Exception e) {
                        Console.WriteLine(e);
                    }
                    c++;
                    //if (message.OK) { Console.WriteLine(message.Value); }
                    if (message.Ok)
                    {
                        await queue.TryDeleteMessage(message.DeleteHandle);
                    }
                    if (message.Ok && c == n)
                    {
                        break;                       // n * 2
                    }
                }
            });

            producer1.Wait();
            //producer2.Wait();
            consumer.Wait();
            sw.Stop();
            Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
            queue.Dispose();
            //Thread.Sleep(2000);
        }
        /// <summary>
        /// 增量缓存计数
        /// </summary>
        /// <param name="countType">计数类型</param>
        /// <param name="tenantType">租户类型</param>
        /// <param name="tenantId">租户ID</param>
        /// <param name="value">增量数</param>
        /// <returns>增量后数,如果增量数为0时,返回查询的增量数</returns>

        private long SetRedisQueue(string countType, string tenantType, string tenantId, long value = 0)
        {
            var redisQueue = new RedisQueue(_options.GetRedisOptions);
            var newValue   = redisQueue.GetCount(countType, tenantType, tenantId);

            value    = redisQueue.ChangeCount(countType, tenantType, tenantId, value);
            newValue = newValue == 0 ? value : newValue;
            return(newValue);
        }
Example #8
0
        public void RedisQueue_CtorTest()
        {
            const string name = "defaultQueue";
            const int    ttl  = 0;
            RedisQueue   q    = new RedisQueue(name, ttl);

            Assert.That(q.Name, Is.EqualTo(name));
            Assert.That(q.TTL, Is.EqualTo(ttl));
        }
Example #9
0
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null, int deadLetterMaxItems = 100, bool runQueueMaintenance = true)
        {
            var muxer = SharedConnection.GetMuxer();
            var queue = new RedisQueue <SimpleWorkItem>(muxer, workItemTimeout: workItemTimeout,
                                                        retries: retries, retryDelay: retryDelay, deadLetterMaxItems: deadLetterMaxItems, runMaintenanceTasks: runQueueMaintenance, loggerFactory: Log);

            _logger.Debug("Queue Id: {queueId}", queue.QueueId);
            return(queue);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public Task <IEnumerable <SpiderStatistics> > GetSpiderStatisticsListAsync(int page, int size)
        {
            var redisQueue = new RedisQueue(_options.GetRedisOptions);

            var list = redisQueue.Gets <SpiderStatistics>("Count");

            list = list.Skip((page - 1) * size).Take(size).ToList();

            return(Task.FromResult <IEnumerable <SpiderStatistics> >(list));
        }
Example #11
0
		static void Main ()
		{
            String hostName = Dns.GetHostName();
			Log.Info("Starting .NET Gearman Server v0.5 on host " + hostName);
            var redisClient = new RedisClient("localhost");
            var redisQueue = new RedisQueue(redisClient); 
            var jobQueue = new JobQueue(redisQueue);
			//var jobQueue = new JobQueue();
			new Daemon(jobQueue, hostName); 
		}
        /// <summary>
        ///
        /// </summary>
        /// <param name="page"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public Task <IEnumerable <DownloadStatistics> > GetDownloadStatisticsListAsync(int page, int size)
        {
            var redisQueue = new RedisQueue(_options.GetRedisOptions);
            //队列
            var list = redisQueue.Gets <DownloadStatistics>(Const.RedisStatisticsDownload);

            list = list.Skip((page - 1) * size).Take(size).ToList();

            return(Task.FromResult <IEnumerable <DownloadStatistics> >(list));
        }
Example #13
0
        public void CouldSendAndReceiveMessages()
        {
            var       redis = new Redis(keyNameSpace: "RedisQueueTests");
            var       queue = new RedisQueue <string>(redis, "CouldSendAndReceiveMessages", timeout: 5000);
            const int n     = 100000;

            var sw = new Stopwatch();

            sw.Start();
            var producer1 = Task.Run(async() => {
                for (var i = 0; i < n; i++)
                {
                    var sendResult = await queue.TrySendMessage(i.ToString());
                    if (!sendResult.Ok)
                    {
                        Assert.Fail("Cannot send a message");
                    }
                    //await Task.Delay(50);
                }
            });

            //var producer2 = Task.Run(async () => {
            //    for (var i = n; i < 2*n; i++) {
            //        await queue.TrySendMessage(i.ToString());
            //        //await Task.Delay(50);
            //    }
            //});

            var consumer = Task.Run(async() =>
            {
                var c = 0;
                while (true)
                {
                    var message = await queue.TryReceiveMessage();
                    c++;
                    //if (message.OK) { Console.WriteLine(message.Value); }
                    if (message.Ok)
                    {
                        await queue.TryDeleteMessage(message.DeleteHandle);
                    }
                    if (message.Ok && c == n)
                    {
                        break;                        // n * 2
                    }
                }
            });

            producer1.Wait();
            //producer2.Wait();
            consumer.Wait();
            sw.Stop();
            Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}");
            //Thread.Sleep(2000);
        }
        public RedisQueueConsumer(IInterfacePresenter interfacePresenter, string redisQueueName)
        {
            var server        = "127.0.0.1";
            int port          = 6379;
            int redisDatabase = 10;

            _redisQueue = new RedisQueue(server, port, redisDatabase);

            _interfacePresenter = interfacePresenter;
            _redisQueueName     = redisQueueName;
        }
        protected override IQueue<SimpleWorkItem> GetQueue(int retries = 1, TimeSpan? workItemTimeout = null, TimeSpan? retryDelay = null) {
            //if (!Settings.Current.UseAzureServiceBus)
            //      return;

            if (_muxer == null)
                _muxer = ConnectionMultiplexer.Connect(Settings.Current.RedisConnectionInfo.ToString());

            var queue = new RedisQueue<SimpleWorkItem>(_muxer, workItemTimeout: workItemTimeout, retries: retries, retryDelay: retryDelay);
            Debug.WriteLine(String.Format("Queue Id: {0}", queue.QueueId));
            return queue;
        }
Example #16
0
        static void Main()
        {
            String hostName = Dns.GetHostName();

            Log.Info("Starting .NET Gearman Server v0.5 on host " + hostName);
            var redisClient = new RedisClient("localhost");
            var redisQueue  = new RedisQueue(redisClient);
            var jobQueue    = new JobQueue(redisQueue);

            //var jobQueue = new JobQueue();
            new Daemon(jobQueue, hostName);
        }
Example #17
0
        public void Low_Level_Transport_Test()
        {
            var clientManager = new PooledRedisClientManager();

            var messageMapper = new MessageMapper();

            messageMapper.Initialize(new[] { typeof(TestMessage), typeof(TestEvent) });

            var sendAddress = Address.Parse("lowlevel@localhost");

            var queue = new RedisQueue(new JsonSerializer(), clientManager, new QueueKeyNameProvider(true));

            queue.Init(sendAddress, true);

            var nsbSerializer = new JsonMessageSerializer(messageMapper);

            var message = new TestMessage()
            {
                Name = "Bob"
            };

            var transportMessage = new TransportMessage()
            {
                MessageIntent = MessageIntentEnum.Send
            };

            using (var ms = new MemoryStream())
            {
                nsbSerializer.Serialize(new [] { message }, ms);
                transportMessage.Body = ms.ToArray();
            }

            using (var tran = new TransactionScope())
            {
                for (int x = 0; x < 2; x++)
                {
                    queue.Send(transportMessage, sendAddress);
                }
                tran.Complete();
            }

            for (int x = 0; x < 2; x++)
            {
                if (queue.HasMessage())
                {
                    using (var tran = new TransactionScope())
                    {
                        queue.Receive();
                        tran.Complete();
                    }
                }
            }
        }
Example #18
0
        public void RedisProducer_PublishToIQueueTest()
        {
            const string message  = "hee hee hee";
            var          queue    = new RedisQueue("againNotARealQueue", 0);
            var          producer = _objectFactory.GetObject <IProducer>(ProducerName);

            producer.Publish(queue, message);
            var connection    = (RedisConnection)producer.Connection;
            var actualMessage = connection.Multiplexer.GetDatabase().ListLeftPop(queue.Name);

            Assert.That(actualMessage.ToString(), Is.EqualTo(message));
        }
        public async Task CanDisposeCacheAndQueueAndReceiveSubscribedMessages()
        {
            var muxer       = SharedConnection.GetMuxer();
            var messageBus1 = new RedisMessageBus(new RedisMessageBusOptions {
                Subscriber = muxer.GetSubscriber(), Topic = "test-messages", LoggerFactory = Log
            });

            var cache = new RedisCacheClient(new RedisCacheClientOptions {
                ConnectionMultiplexer = muxer
            });

            Assert.NotNull(cache);

            var queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem> {
                ConnectionMultiplexer = muxer,
                LoggerFactory         = Log
            });

            Assert.NotNull(queue);

            using (messageBus1) {
                using (cache) {
                    using (queue) {
                        await cache.SetAsync("test", "test", TimeSpan.FromSeconds(10));

                        await queue.DequeueAsync(new CancellationToken(true));

                        var countdown = new AsyncCountdownEvent(2);
                        await messageBus1.SubscribeAsync <SimpleMessageA>(msg => {
                            Assert.Equal("Hello", msg.Data);
                            countdown.Signal();
                        });

                        await messageBus1.PublishAsync(new SimpleMessageA { Data = "Hello" });

                        await countdown.WaitAsync(TimeSpan.FromSeconds(2));

                        Assert.Equal(1, countdown.CurrentCount);

                        cache.Dispose();
                        queue.Dispose();

                        await messageBus1.PublishAsync(new SimpleMessageA { Data = "Hello" });

                        await countdown.WaitAsync(TimeSpan.FromSeconds(2));

                        Assert.Equal(0, countdown.CurrentCount);
                    }
                }
            }
        }
        public IQueue <T> CreateQueue <T>(string name) where T : class
        {
            var logger = _loggerFactory.CreateLogger(GetType());

            logger.LogInformation("Create new Redis Queue {Name} for {Type}", name, typeof(T).Name);
            var queue = new RedisQueue <T>(new RedisQueueOptions <T>()
            {
                LoggerFactory         = _loggerFactory,
                Name                  = name,
                ConnectionMultiplexer = _connection
            });

            return(queue);
        }
Example #21
0
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null, int deadLetterMaxItems = 100, bool runQueueMaintenance = true)
        {
            var queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem> {
                ConnectionMultiplexer = SharedConnection.GetMuxer(),
                Retries             = retries,
                RetryDelay          = retryDelay.GetValueOrDefault(TimeSpan.FromMinutes(1)),
                DeadLetterMaxItems  = deadLetterMaxItems,
                WorkItemTimeout     = workItemTimeout.GetValueOrDefault(TimeSpan.FromMinutes(5)),
                RunMaintenanceTasks = runQueueMaintenance,
                LoggerFactory       = Log
            });

            _logger.LogDebug("Queue Id: {queueId}", queue.QueueId);
            return(queue);
        }
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null)
        {
            //if (!Settings.Current.UseAzureServiceBus)
            //      return;

            if (_muxer == null)
            {
                _muxer = ConnectionMultiplexer.Connect(Settings.Current.RedisConnectionInfo.ToString());
            }

            var queue = new RedisQueue <SimpleWorkItem>(_muxer, workItemTimeout: workItemTimeout, retries: retries, retryDelay: retryDelay);

            Debug.WriteLine(String.Format("Queue Id: {0}", queue.QueueId));
            return(queue);
        }
Example #23
0
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null, int deadLetterMaxItems = 100, bool runQueueMaintenance = true)
        {
            var queue = new RedisQueue <SimpleWorkItem>(o => o
                                                        .ConnectionMultiplexer(SharedConnection.GetMuxer())
                                                        .Retries(retries)
                                                        .RetryDelay(retryDelay.GetValueOrDefault(TimeSpan.FromMinutes(1)))
                                                        .DeadLetterMaxItems(deadLetterMaxItems)
                                                        .WorkItemTimeout(workItemTimeout.GetValueOrDefault(TimeSpan.FromMinutes(5)))
                                                        .RunMaintenanceTasks(runQueueMaintenance)
                                                        .LoggerFactory(Log)
                                                        );

            _logger.LogDebug("Queue Id: {queueId}", queue.QueueId);
            return(queue);
        }
Example #24
0
        protected override IQueue <SimpleWorkItem> GetQueue(int retries = 1, TimeSpan?workItemTimeout = null, TimeSpan?retryDelay = null)
        {
            if (Settings.Current.RedisConnectionString == null)
            {
                return(null);
            }

            if (_muxer == null)
            {
                _muxer = ConnectionMultiplexer.Connect(Settings.Current.RedisConnectionString);
            }

            var queue = new RedisQueue <SimpleWorkItem>(_muxer, workItemTimeout: workItemTimeout, retries: retries, retryDelay: retryDelay);

            Debug.WriteLine(String.Format("Queue Id: {0}", queue.QueueId));
            return(queue);
        }
Example #25
0
        private IQueue <T> CreateQueue <T>(bool allQueuesTheSameName = true) where T : class
        {
            var name = typeof(T).FullName.Trim().Replace(".", string.Empty).ToLower();

            if (allQueuesTheSameName)
            {
                name = "cmd";
            }

            var queue = new RedisQueue <T>(o => o
                                           .ConnectionMultiplexer(SharedConnection.GetMuxer())
                                           .Name(name)
                                           .LoggerFactory(Log)
                                           );

            _logger.LogDebug("Queue Id: {queueId}", queue.QueueId);
            return(queue);
        }
Example #26
0
        public async void Start2()
        {
            IConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect("47.94.140.80:6379");

            //ISubscriber subscriber = connectionMultiplexer.GetSubscriber();


            IQueue <SimpleWorkItem> queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem>()
            {
                ConnectionMultiplexer = (ConnectionMultiplexer)connectionMultiplexer
            });//Queue<SimpleWorkItem>(new InMemoryQueueOptions<SimpleWorkItem>());


            var workItem2 = await queue.DequeueAsync();

            workItem2.MarkCompleted();

            Console.WriteLine($"queue333:{workItem2.Value.Data}");
        }
Example #27
0
        public async void Start1()
        {
            IConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect("47.94.140.80:6379");

            //ISubscriber subscriber = connectionMultiplexer.GetSubscriber();


            IQueue <SimpleWorkItem> queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem>()
            {
                ConnectionMultiplexer = (ConnectionMultiplexer)connectionMultiplexer
            });//Queue<SimpleWorkItem>(new InMemoryQueueOptions<SimpleWorkItem>());

            await queue.EnqueueAsync(new SimpleWorkItem {
                Data = "Hello"
            });

            //var workItem = await queue.DequeueAsync();

            //Console.WriteLine($"queue:{workItem.Value.Data}");
        }
Example #28
0
        public void CanRunQueueJob()
        {
            const int workItemCount = 10000;
            var metrics = new InMemoryMetricsClient();
            var queue = new RedisQueue<SampleQueueWorkItem>(SharedConnection.GetMuxer(), null, null, 0, TimeSpan.Zero);
            queue.AttachBehavior(new MetricsQueueBehavior<SampleQueueWorkItem>(metrics, "test"));

            metrics.StartDisplayingStats(TimeSpan.FromMilliseconds(100), _writer);
            Task.Factory.StartNew(() => {
                Parallel.For(0, workItemCount, i => {
                    queue.Enqueue(new SampleQueueWorkItem { Created = DateTime.Now, Path = "somepath" + i });
                });
            });

            var job = new SampleQueueJob(queue, metrics);
            job.RunUntilEmpty();
            metrics.DisplayStats(_writer);

            Assert.Equal(0, queue.GetQueueStats().Queued);
        }
Example #29
0
        public async void Start1()
        {
            IConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect("47.94.140.80:6379");

            //ISubscriber subscriber = connectionMultiplexer.GetSubscriber();


            IQueue <SimpleWorkItem> queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem>()
            {
                ConnectionMultiplexer = (ConnectionMultiplexer)connectionMultiplexer
            });//Queue<SimpleWorkItem>(new InMemoryQueueOptions<SimpleWorkItem>());

            for (int i = 0; i < 100; i++)
            {
                await queue.EnqueueAsync(new SimpleWorkItem
                {
                    Data = $"Hello   {i}       " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
                });
            }
        }
Example #30
0
        public void CanRunQueueJob()
        {
            const int workItemCount = 10000;
            var       metrics       = new InMemoryMetricsClient();
            var       queue         = new RedisQueue <SampleQueueWorkItem>(SharedConnection.GetMuxer(), null, null, 0, TimeSpan.Zero, metrics: metrics);

            Task.Factory.StartNew(() => {
                Parallel.For(0, workItemCount, i => {
                    queue.Enqueue(new SampleQueueWorkItem {
                        Created = DateTime.Now, Path = "somepath" + i
                    });
                });
            });

            var job = new SampleQueueJob(queue, metrics);

            job.RunUntilEmpty();
            metrics.DisplayStats();

            Assert.Equal(0, queue.GetQueueCount());
        }
Example #31
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddCors(pOptions => pOptions.AddPolicy("AllowAll", pBuilder =>
            {
                pBuilder.AllowAnyHeader()
                .AllowAnyMethod()
                .AllowAnyOrigin();
            }));

            IConfiguration config = new ConfigurationBuilder()
                                    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                                    .AddJsonFile("config.json")
                                    //.AddEnvironmentVariables("redis_")
                                    .Build();

            IRedisQueue redisQueue = new RedisQueue(config);

            services.AddSingleton(config);
            services.AddSingleton(redisQueue);
        }
Example #32
0
        /// <summary>
        ///     Start
        /// </summary>
        public bool Start()
        {
            var json   = ApiHostConfig.QueryMessage.GetStringFromUrl();
            var result = JsonConvert.DeserializeObject <ServerResponse <List <Message> > >(json);

            //清除队列
            _baseRedisServiceManager.RemoveList("QueueScheduling");

            foreach (var item in result.Result)
            {
                var queue = new RedisQueue <Message>
                {
                    Key    = "QueueScheduling",
                    Entity = item
                };
                _baseRedisServiceManager.AddQueue(queue);
            }
            //新进程
            Task.Factory.StartNew(DelayStart, _cancelTokenSource.Token);

            return(true);
        }
Example #33
0
        public override IServiceProvider Bootstrap() {
            var container = new Container();
            container.Options.AllowOverridingRegistrations = true;

            container.Register<IAmADependency, MyDependency>();
            var muxer = ConnectionMultiplexer.Connect("localhost");
            container.RegisterSingleton(muxer);

            var q1 = new RedisQueue<PingRequest>(muxer);
            var q2 = new RedisQueue<PingRequest>(muxer);
            container.RegisterSingleton<IQueue<PingRequest>>(() => q2);

            Task.Run(async () => {
                var startDate = DateTime.Now;
                while (startDate.AddSeconds(30) > DateTime.Now) {
                    Console.WriteLine("Enqueueing ping.");
                    await q1.EnqueueAsync(new PingRequest { Data = "Hi" }).AnyContext();
                    await Task.Delay(RandomData.GetInt(100, 1000)).AnyContext();
                }
            }).AnyContext();

            return container;
        }
Example #34
0
        //var workItem = await queue.DequeueAsync();

        //Console.WriteLine($"queue:{workItem.Value.Data}");

        public async void Start2()
        {
            IConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect("47.94.140.80:6379");

            //ISubscriber subscriber = connectionMultiplexer.GetSubscriber();


            IQueue <SimpleWorkItem> queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem>()
            {
                ConnectionMultiplexer = (ConnectionMultiplexer)connectionMultiplexer
            });//Queue<SimpleWorkItem>(new InMemoryQueueOptions<SimpleWorkItem>());

            // var DeadletterItems= await queue.GetDeadletterItemsAsync();
            // var workItem = await queue.DequeueAsync();



            //Task.Factory.StartNew( async () =>
            //{
            //    Thread.Sleep(1000);
            //    Console.WriteLine($"is work complete? :{workItem.IsCompleted}");
            //    Console.WriteLine($"queue222:{workItem.Value.Data}");
            //    await workItem.CompleteAsync();
            //});

            for (int i = 0; i < 10; i++)
            {
                var workItem2 = await queue.DequeueAsync();

                if (workItem2 != null)
                {
                    Console.WriteLine($"queue333:{workItem2.Value.Data}");
                }
            }

            Console.WriteLine($" end of this time");
        }
Example #35
0
 /// <summary>
 ///     AddQueue
 /// </summary>
 /// <param name="entity"></param>
 public void AddQueue <T>(RedisQueue <T> entity) where T : class
 {
     RedisClientManager
     .AddItemToList(entity.Key, entity.EntityData);
 }
Example #36
0
 protected override IQueue<SimpleWorkItem> GetQueue(int retries = 1, TimeSpan? workItemTimeout = null, TimeSpan? retryDelay = null, int deadLetterMaxItems = 100, bool runQueueMaintenance = true) {
     var queue = new RedisQueue<SimpleWorkItem>(SharedConnection.GetMuxer(), workItemTimeout: workItemTimeout,
         retries: retries, retryDelay: retryDelay, deadLetterMaxItems: deadLetterMaxItems, runMaintenanceTasks: runQueueMaintenance, loggerFactory: Log);
     _logger.Debug("Queue Id: {queueId}", queue.QueueId);
     return queue;
 }