public void SubscribeLoadTest()
        {
            // arrange
            var publisher     = new ReliablePublisher(_redis.GetConnection());
            var messageParser = new MessageParser();
            var subscriber    = new ReliableSubscriber(_subscriberConnection, messageParser);
            var channelName   = nameof(SubscribeLoadTest) + RandomSuffix;
            var testMessage   = JsonConvert.SerializeObject(new { myKey = "test value's" });

            int messagesReceivedCount = 0;

            var messageHandler = new MessageHandler((channel, message) =>
            {
                Interlocked.Increment(ref messagesReceivedCount);
            });

            // act
            subscriber.Subscribe(channelName, messageHandler);

            const int messagesCount = 5000;
            var       stopwatch     = new Stopwatch();

            stopwatch.Start();
            for (int i = 0; i < messagesCount; i++)
            {
                publisher.PublishAsync(channelName, testMessage);
            }

            // assert
            _output.WriteLine($"All {messagesCount} messages sent at {stopwatch.Elapsed}. Already received messages={messagesReceivedCount}");
            WaitUntil(() => messagesReceivedCount == messagesCount, 1000);
            _output.WriteLine($"All {messagesReceivedCount} messages received at {stopwatch.Elapsed}.");

            Assert.Equal(messagesCount, messagesReceivedCount);
        }
        public ReliablePublisherSubscriber(IConnectionMultiplexer connectionMultiplexer, ILoggerFactory loggerFactory = default)
        {
            _connectionMultiplexer = connectionMultiplexer;
            _publisher             = new ReliablePublisher(connectionMultiplexer);
            var messageParser = new MessageParser(ToLogger <MessageParser>(loggerFactory));

            _subscriber = new ReliableSubscriber(connectionMultiplexer, messageParser, loggerFactory);
        }
Esempio n. 3
0
        public async Task SubscribeAsyncTwiceToSameChannelShouldFail()
        {
            // arrange
            var subscriber = new ReliableSubscriber(_redis.GetConnection(), null);

            // act & assert
            await subscriber.SubscribeAsync("testChannel", _messageHandler.Object);

            var exception = await Assert.ThrowsAsync <ArgumentException>(() => subscriber.SubscribeAsync("testChannel", _messageHandler.Object));

            Assert.Contains("There already exists a handler subscribed to channel", exception.Message);
        }