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);
        }
예제 #2
0
        public async Task PublishAsyncTest()
        {
            // arrange
            var channelName     = "test-channel-" + nameof(PublishAsyncTest);
            var publisher       = new ReliablePublisher(_redis.GetConnection());
            var subscriber      = _redis.GetConnection().GetSubscriber(); // standard, not-reliable subscriber
            var receivedMessage = "";
            await subscriber.SubscribeAsync(channelName, (channel, message) => receivedMessage += message);

            // act
            await publisher.PublishAsync(channelName, "test message");

            Thread.Sleep(20);

            // assert
            Assert.Equal("1:test message", receivedMessage);
        }
 public Task PublishAsync(string channel, string message, TimeSpan messageExpiration = default)
 {
     return(_publisher.PublishAsync(channel, message, messageExpiration));
 }