RabbitMQ Topology
A Queue that works on the basis of FIFO (first in first out).
A Publisher is the component that generates some data that is pushed to the queue.
Installation
Install the correct version of Erlang based on the operating system you are using.
Download and install RabbitMQ server.
Now install the RabbitMQ .Net client from NuGet Package Manager.
Sample Codes
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Threading;
namespace PracticeRabbitMQ
{
class Program
{
static void Main()
{
SendMessage("MessageID", "{MessageID: 1, MessageBody: 'Sample Message' }");
ReceiveMessage("MessageID");
Console.ReadLine();
}
public static void SendMessage(string queue, string data)
{
using (IConnection connection = new ConnectionFactory().CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
channel.QueueDeclare(queue, false, false, false, null);
channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));
Console.WriteLine("Sending Message: {0}", data);
}
}
}
public static void ReceiveMessage(string queue)
{
using (IConnection connection = new ConnectionFactory().CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
channel.QueueDeclare(queue, false, false, false, null);
var consumer = new EventingBasicConsumer(channel);
BasicGetResult result = channel.BasicGet(queue, true);
if (result != null)
{
string data =
Encoding.UTF8.GetString(result.Body);
//Added delay for demo
Thread.Sleep(2000);
Console.WriteLine("Receiving Message: {0}", data);
}
}
}
}
public IConnection GetConnection(string hostName, string userName, string password)
{
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.HostName = hostName;
connectionFactory.UserName = userName;
connectionFactory.Password = password;
return connectionFactory.CreateConnection();
}
}
}
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Threading;
namespace PracticeRabbitMQ
{
class Program
{
static void Main()
{
SendMessage("MessageID", "{MessageID: 1, MessageBody: 'Sample Message' }");
ReceiveMessage("MessageID");
Console.ReadLine();
}
public static void SendMessage(string queue, string data)
{
using (IConnection connection = new ConnectionFactory().CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
channel.QueueDeclare(queue, false, false, false, null);
channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));
Console.WriteLine("Sending Message: {0}", data);
}
}
}
public static void ReceiveMessage(string queue)
{
using (IConnection connection = new ConnectionFactory().CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
channel.QueueDeclare(queue, false, false, false, null);
var consumer = new EventingBasicConsumer(channel);
BasicGetResult result = channel.BasicGet(queue, true);
if (result != null)
{
string data =
Encoding.UTF8.GetString(result.Body);
//Added delay for demo
Thread.Sleep(2000);
Console.WriteLine("Receiving Message: {0}", data);
}
}
}
}
public IConnection GetConnection(string hostName, string userName, string password)
{
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.HostName = hostName;
connectionFactory.UserName = userName;
connectionFactory.Password = password;
return connectionFactory.CreateConnection();
}
}
}
RabbitMQ is the most widely deployed open source message broker.
With tens of thousands of users, RabbitMQ is one of the most popular open source message brokers. RabbitMQ is used worldwide at small startups and large enterprises.
