2026-05-19 rabbitmq example

Situatie

Ik moest RabbitMQ gaan initialiseren in de code. Maar had niet genoeg tijd om het grondig te researchen omdat we al lichtelijk achter lopen.

Gebruikt

Prompt 1

now show me some example rabbitMQ c# connection logic (using the RabbitMQ.Client v7.2.1)

using RabbitMQ.Client;
using RabbitMQ.Client.Events;
 
// Create a connection factory and configure it
var factory = new ConnectionFactory()
{
    HostName = "localhost",
    UserName = "guest",
    Password = "guest",
    VirtualHost = "/",
    // Optional: provide a client-provided connection name
    ClientProvidedName = "my-app:consumer"
};
 
// Enable automatic recovery from network failures
factory.AutomaticRecoveryEnabled = true;
factory.NetworkRecoveryInterval = TimeSpan.FromSeconds(10);
 
try
{
    // Open a connection
    IConnection connection = await factory.CreateConnectionAsync();
    
    // Create a channel
    IChannel channel = await connection.CreateChannelAsync();
    
    // Declare an exchange
    await channel.ExchangeDeclareAsync(
        exchange: "my-exchange",
        type: ExchangeType.Direct
    );
    
    // Declare a queue
    await channel.QueueDeclareAsync(
        queue: "my-queue",
        durable: false,
        exclusive: false,
        autoDelete: false
    );
    
    // Bind the queue to the exchange
    await channel.QueueBindAsync(
        queue: "my-queue",
        exchange: "my-exchange",
        routingKey: "my.routing.key"
    );
    
    // Create a consumer
    var consumer = new AsyncEventingBasicConsumer(channel);
    
    consumer.ReceivedAsync += async (ch, ea) =>
    {
        var body = ea.Body.ToArray();
        var message = System.Text.Encoding.UTF8.GetString(body);
        
        Console.WriteLine($"Received message: {message}");
        
        // Acknowledge the message
        await channel.BasicAckAsync(ea.DeliveryTag, false);
    };
    
    // Start consuming
    string consumerTag = await channel.BasicConsumeAsync(
        queue: "my-queue",
        autoAck: false,
        consumer: consumer
    );
    
    Console.WriteLine("Consumer started. Press [Enter] to exit.");
    Console.ReadLine();
    
    // Cleanup
    await channel.BasicCancelAsync(consumerTag);
    await channel.CloseAsync();
    await connection.CloseAsync();
    await channel.DisposeAsync();
    await connection.DisposeAsync();
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}

Key points:

  • QueueDeclare() ensures the queue exists
  • EventingBasicConsumer handles incoming messages asynchronously
  • BasicAck() confirms message processing (removes from queue)
  • Set autoAck: false so you manually acknowledge after processing

Resultaat

Ik heb dit resultaat overgenomen, om het daarna direct te kunnen aanpassen om het op een spelende wijs te leren hoe het precies werkt, want dit is voor mij een efficiente manier om het te leren.

Verbeterpunten

Ik had ook gewoon deze pagina kunnen lezen, de officiele rabbitMQ C# plugin documentatie. Dit had mogelijke fouten kunnen voorkomen, maar gelukkig zat er in deze template geen fout (of heb ik die nooit encountered)