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