RabbitMQ NET Client: Building a Basic Messaging Web App

Listen to this Post

RabbitMQ is a powerful message broker that enables applications to communicate asynchronously by sending and receiving messages. In this article, we’ll explore how to use the RabbitMQ .NET Client library to create a basic messaging web app, following Milan Jovanović’s tutorial.

You Should Know:

1. Setting Up RabbitMQ

Before using RabbitMQ, ensure it’s installed on your system. For Linux, run:

sudo apt-get update 
sudo apt-get install rabbitmq-server 
sudo systemctl start rabbitmq-server 

For Windows, download it from RabbitMQ Official Site.

2. Installing the .NET Client Library

Add the RabbitMQ .NET client to your project:

dotnet add package RabbitMQ.Client 

3. Basic Producer and Consumer Code

Producer (Sender):

using RabbitMQ.Client; 
var factory = new ConnectionFactory() { HostName = "localhost" }; 
using (var connection = factory.CreateConnection()) 
using (var channel = connection.CreateModel()) 
{ 
channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); 
string message = "Hello RabbitMQ!"; 
var body = Encoding.UTF8.GetBytes(message); 
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); 
Console.WriteLine("Sent: {0}", message); 
} 

Consumer (Receiver):

using RabbitMQ.Client; 
using RabbitMQ.Client.Events; 
var factory = new ConnectionFactory() { HostName = "localhost" }; 
using (var connection = factory.CreateConnection()) 
using (var channel = connection.CreateModel()) 
{ 
channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); 
var consumer = new EventingBasicConsumer(channel); 
consumer.Received += (model, ea) => 
{ 
var body = ea.Body.ToArray(); 
var message = Encoding.UTF8.GetString(body); 
Console.WriteLine("Received: {0}", message); 
}; 
channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); 
Console.WriteLine("Waiting for messages..."); 
Console.ReadLine(); 
} 

4. Working with Exchanges

RabbitMQ supports different exchange types (direct, fanout, topic, headers). Example of a fanout exchange:

channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout); 
channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: null, body: body); 

5. Monitoring RabbitMQ

Check RabbitMQ status on Linux:

sudo rabbitmqctl status 

Enable the management plugin:

sudo rabbitmq-plugins enable rabbitmq_management 

Access the dashboard at http://localhost:15672` (default credentials:guest/guest`).

What Undercode Say:

RabbitMQ is essential for distributed systems, ensuring reliable message delivery. Key takeaways:
– Use durable queues (durable: true) for persistence.
– Acknowledge messages (autoAck: false) to prevent data loss.
– Prefetch count (channel.BasicQos) controls message flow.
– Secure RabbitMQ with TLS and firewall rules (sudo ufw allow 5672).

Expected Output:

A functional messaging system where producers send messages to queues and consumers process them asynchronously. Explore advanced features like RPC patterns and dead-letter exchanges for robust applications.

For further reading: RabbitMQ .NET Client Docs

References:

Reported By: Mphiliseni Milan – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass ✅

Join Our Cyber World:

💬 Whatsapp | 💬 TelegramFeatured Image