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);
                    }
                }
            }
        }
예제 #2
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}");
        }
예제 #3
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");
        }