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.