39 lines
1.2 KiB
C#
39 lines
1.2 KiB
C#
|
using RabbitMQ.Client;
|
|||
|
using RabbitMQ.Client.Events;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
var factory = new ConnectionFactory
|
|||
|
{
|
|||
|
HostName = "rabbitmq",
|
|||
|
UserName = "admin",
|
|||
|
Password = "admin"
|
|||
|
};
|
|||
|
using var connection = await factory.CreateConnectionAsync();
|
|||
|
using var channel = await connection.CreateChannelAsync();
|
|||
|
|
|||
|
var queueName = "slow_queue";
|
|||
|
var exchangeName = "logs_exchange";
|
|||
|
await channel.QueueDeclareAsync(queue: queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
|
|||
|
|
|||
|
await channel.QueueBindAsync(queue: queueName, exchange: exchangeName, routingKey: "");
|
|||
|
|
|||
|
Console.WriteLine("[Consumer1] Waiting for messages...");
|
|||
|
|
|||
|
while (true)
|
|||
|
{
|
|||
|
var consumer = new AsyncEventingBasicConsumer(channel);
|
|||
|
consumer.ReceivedAsync += (model, ea) =>
|
|||
|
{
|
|||
|
var body = ea.Body.ToArray();
|
|||
|
var message = Encoding.UTF8.GetString(body);
|
|||
|
Console.WriteLine($"[Consumer1] Received: {message}");
|
|||
|
|
|||
|
Thread.Sleep(new Random().Next(2000, 3000));
|
|||
|
|
|||
|
Console.WriteLine("[Consumer1] Done processing");
|
|||
|
channel.BasicAckAsync(deliveryTag: ea.DeliveryTag, multiple: false);
|
|||
|
return Task.CompletedTask;
|
|||
|
};
|
|||
|
|
|||
|
await channel.BasicConsumeAsync(queue: queueName, autoAck: false, consumer: consumer);
|
|||
|
}
|