Sobes.tech
Junior — Middle

RabbitMQ sisteminde mesajlar birden fazla aboneye nasıl iletilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

RabbitMQ'da mesajların birden fazla aboneye iletimi "fanout" tipi değişimlerle gerçekleştirilir. Bu değişim, alınan her mesajı bağlı olduğu tüm kuyruklara gönderir. Böylece, kendi kuyruğunu dinleyen her abone, mesajın bir kopyasını alır.

C# kullanarak RabbitMQ.Client kütüphanesi ile örnek:

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);

Burada, her abone kendi kuyruğunu oluşturur ve fanout değişimine bağlar, böylece tüm mesajları alır.