Sobes.tech
Junior — Middle

RabbitMQ tizimida bir nechta obuna oluvchilarga xabarlarni qanday yetkazish amalga oshiriladi?

sobes.tech AI

AIdan javob

RabbitMQ'da xabarlarni bir nechta obuna bo'lib yetkazish "fanout" turdagi almashuvchilar orqali amalga oshiriladi. Bunday almashuvchi har bir qabul qilingan xabarni unga bog'langan barcha navbatlarga yuboradi. Shu tarzda, o'z navbatini tinglayotgan har bir obuna xabar nusxasini oladi.

C# da RabbitMQ.Client kutubxonasi yordamida misol:

var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

channel.ExchangeDeclare(exchange: "logs", type: ExchangeType.Fanout);

var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange: "logs", routingKey: "");

var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) => {
    var body = ea.Body.ToArray();
    var message = Encoding.UTF8.GetString(body);
    Console.WriteLine("Received: " + message);
};
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);

Bu yerda, har bir obuna o'z navbatini yaratadi va fanout almashuvchisiga bog'laydi, shuning uchun barcha xabarlarni oladi.