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); }
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); }