public async Task CanListenToMessageAndSurviveRestart() { var randomMessage1 = "first-" + Guid.NewGuid(); var randomMessage2 = "second-" + Guid.NewGuid(); var semaphore = new SemaphoreSlim(1); await _serviceClient.CreateQueueAsync(_queueName); var actualMessages = new List <string>(); var consumerOptions = new ConsumerOptionsBuilder <string>() .WithDefaultDeSerializer(message => JsonConvert.DeserializeObject <string>(Encoding.UTF8.GetString(message.Span))) .WithSimpleMessageAck() .Build(); await _serviceClient.StartListeningQueueAsync(_queueName, consumerOptions, (message, _, ct) => { actualMessages.Add(message); semaphore.Release(); return(Task.CompletedTask); }); await semaphore.WaitAsync(); await _serviceClient.EnqueueMessageAsync(_queueName, randomMessage1); await semaphore.WaitAsync(TimeSpan.FromSeconds(20)); InitRabbitMqDocker.RestartRabbitMq(); await _serviceClient.EnqueueMessageAsync(_queueName, randomMessage2); await semaphore.WaitAsync(TimeSpan.FromSeconds(20)); actualMessages.Should().BeEquivalentTo(randomMessage1, randomMessage2); }
public async Task CaneEnqueuePersistentMessage() { var randomMessage1 = Guid.NewGuid(); var randomMessage2 = Guid.NewGuid(); var options = _baseOptionBuilder .WithDeliveryMode(DeliveryMode.Persistent) .Build(); _serviceClient = new RabbitMqServiceClient(options); await _serviceClient.CreateQueueAsync(_queueName); await _serviceClient.EnqueueMessageAsync(_queueName, new { test = "first-" + randomMessage1 }); InitRabbitMqDocker.RestartRabbitMq(); await _serviceClient.EnqueueMessageAsync(_queueName, new { test = "second-" + randomMessage2 }); using var channelContainer = await _rabbitMqConnectionManager.AcquireChannel(ChannelType.Consumer); var message1 = Encoding.UTF8.GetString(channelContainer.Channel.BasicGet(_queueName, true).Body.Span); var message2 = Encoding.UTF8.GetString(channelContainer.Channel.BasicGet(_queueName, true).Body.Span); using (new AssertionScope()) { message1.Should().BeEquivalentTo($"{{\"test\":\"first-{randomMessage1}\"}}"); message2.Should().BeEquivalentTo($"{{\"test\":\"second-{randomMessage2}\"}}"); } }