Publishing and Consuming Messages
Once RabbitMQ is set up, you can start publishing and consuming messages using RabbitMQ. This allows different components of a distributed system to communicate with each other.
Publishing Messages
To publish a message, you need to create a Publisher
class. First, create a connection to the RabbitMQ server using the connection factory. Then, create a channel using the connection object. Declare a queue to which the message will be published using channel.QueueDeclare()
. Finally, use channel.BasicPublish()
to publish the message to the queue. Here's an example:
1const message = "Hello, world!";
2
3using (var connection = factory.CreateConnection())
4{
5 using (var channel = connection.CreateModel())
6 {
7 channel.QueueDeclare(queue: "my_queue",
8 durable: false,
9 exclusive: false,
10 autoDelete: false,
11 arguments: null);
12
13 var body = Encoding.UTF8.GetBytes(message);
14
15 channel.BasicPublish(exchange: "",
16 routingKey: "my_queue",
17 basicProperties: null,
18 body: body);
19 }
20}
Consuming Messages
To consume a message, you need to create a Consumer
class. Similar to publishing, create a connection to the RabbitMQ server using the connection factory and create a channel. Declare the same queue as in the publisher. Then, create a EventingBasicConsumer
and attach a callback function to the Received
event. In the callback function, you can process the received message. Finally, start consuming the messages using channel.BasicConsume()
. Here's an example:
1using (var connection = factory.CreateConnection())
2{
3 using (var channel = connection.CreateModel())
4 {
5 channel.QueueDeclare(queue: "my_queue",
6 durable: false,
7 exclusive: false,
8 autoDelete: false,
9 arguments: null);
10
11 var consumer = new EventingBasicConsumer(channel);
12 consumer.Received += (model, ea) =>
13 {
14 var body = ea.Body;
15 var message = Encoding.UTF8.GetString(body);
16 Console.WriteLine("Received message: " + message);
17 };
18
19 channel.BasicConsume(queue: "my_queue",
20 autoAck: true,
21 consumer: consumer);
22 }
23}
xxxxxxxxxx
}
const message = "Hello, world!";
// Publishing a message
class Publisher
{
static void Main()
{
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "my_queue",
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "",
routingKey: "my_queue",
basicProperties: null,
body: body);
}
}
}
}
// Consuming a message