public static async Task Main() { var rabbitMqConnectionManager = new RabbitMqConnectionManager(new Uri("amqp://localhost"), "test", TimeSpan.FromSeconds(30)); const string queueName = "some-queue-name"; var options = new RabbitMqServiceOptionsBuilder() .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1)) .WithDeliveryMode(DeliveryMode.Persistent) .WithConnectionManager(rabbitMqConnectionManager) .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json") .Build(); var serviceClient = new RabbitMqServiceClient(options); // Create a queue await serviceClient.CreateQueueAsync(queueName + "-Error", true); // Create a queue with options builder var createQueueOption = new CreateQueueOptionsBuilder(QueueType.Classic) .Durable() .WithDeadLetterExchange(RabbitMqConstants.DefaultExchangeName) .WithDeadLetterRoutingKey(queueName + "-Error") .Build(); await serviceClient.CreateQueueAsync(queueName, createQueueOption); // Listen to queue (Auto reconnect is enabled) var consumerOptions = new ConsumerOptionsBuilder <string>() .WithDefaultDeSerializer(message => JsonConvert.DeserializeObject <string>(Encoding.UTF8.GetString(message.Span))) .WithSimpleMessageAck() .WithCustomPipe(async(context, next) => { Console.WriteLine("Some logging message before processing"); await next(); Console.WriteLine("Some logging message after processing"); }) .Build(); var activeConsumer = await serviceClient.StartListeningQueueAsync(queueName, consumerOptions, (message, items, ct) => { Console.WriteLine(message); return(Task.CompletedTask); }); // Enqueue a message await serviceClient.EnqueueMessageAsync(queueName, "some-message"); await Task.Delay(100); // Enqueue using EnqueueQueueClient var queueClient = serviceClient.CreateQueueClient(queueName); await queueClient.EnqueueMessageAsync("some-other-message"); // Cancel listening activeConsumer.Cancel(); // Purge the queue await serviceClient.PurgeQueueAsync(queueName); // Delete a queue await serviceClient.DeleteQueueAsync(queueName, false, false); await serviceClient.DeleteQueueAsync(queueName + "-Error", false, false); }
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}\"}}"); } }
public void Setup() { _rabbitMqConnectionManager = new RabbitMqConnectionManager(InitRabbitMqDocker.RabbitMqUri, nameof(RabbitMqServiceClientTests), TimeSpan.FromSeconds(20)); _baseOptionBuilder = new RabbitMqServiceOptionsBuilder() .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1)) .WithConnectionManager(_rabbitMqConnectionManager) .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json"); var options = _baseOptionBuilder.Build(); _serviceClient = new RabbitMqServiceClient(options); _queueName = BaseQueueName + Guid.NewGuid(); }
public async Task CanOverridePerMessageTtl() { var options = new RabbitMqServiceOptionsBuilder() .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1)) .WithConnectionManager(_rabbitMqConnectionManager) .WithPerMessageTtl(500) .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json") .Build(); var serviceClient = new RabbitMqServiceClient(options); await serviceClient.CreateQueueAsync(_queueName); await serviceClient.EnqueueMessageAsync(_queueName, "some-message", new Dictionary <string, object> {
public void Setup() { _rabbitMqConnectionManager = new RabbitMqConnectionManager(InitRabbitMqDocker.RabbitMqUri, nameof(RabbitMqServiceClientTests), TimeSpan.FromSeconds(20)); var options = new RabbitMqServiceOptionsBuilder() .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1)) .WithConnectionManager(_rabbitMqConnectionManager) .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json") .Build(); _serviceClient = new RabbitMqServiceClient(options); _queueName = BaseQueueName + Guid.NewGuid(); _errorQueueName = _queueName + "-Error"; _consumerOptions = new ConsumerOptionsBuilder <string>() .WithSimpleMessageAck() .WithDefaultDeSerializer(message => JsonConvert.DeserializeObject <string>(Encoding.UTF8.GetString(message.Span))) .Build(); }
public async Task CanUsePerMessageTtl() { var options = new RabbitMqServiceOptionsBuilder() .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1)) .WithConnectionManager(_rabbitMqConnectionManager) .WithPerMessageTtl(500) .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json") .Build(); var serviceClient = new RabbitMqServiceClient(options); await serviceClient.CreateQueueAsync(_queueName); await serviceClient.EnqueueMessageAsync(_queueName, "some-message"); await Task.Delay(TimeSpan.FromMilliseconds(100)); (await serviceClient.GetMessageCountInQueueAsync(_queueName)).Should().Be(1); await Task.Delay(TimeSpan.FromMilliseconds(600)); (await serviceClient.GetMessageCountInQueueAsync(_queueName)).Should().Be(0); }
public async Task CanConfigureWhenEnqueue() { var options = new RabbitMqServiceOptionsBuilder() .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1)) .WithConnectionManager(_rabbitMqConnectionManager) .WithPerMessageTtl() .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json") .Build(); var serviceClient = new RabbitMqServiceClient(options); await serviceClient.CreateQueueAsync(_queueName); await serviceClient.EnqueueMessageAsync(_queueName, "some-message", new Dictionary <string, object> { [MessageTtlClientPipe.ContextItemExpirationKey] = 300 }); await Task.Delay(TimeSpan.FromMilliseconds(100)); (await serviceClient.GetMessageCountInQueueAsync(_queueName)).Should().Be(1); await Task.Delay(TimeSpan.FromMilliseconds(400)); (await serviceClient.GetMessageCountInQueueAsync(_queueName)).Should().Be(0); }