Sobes.tech
Junior — Middle

Kā notiek ziņojumu piegāde vairākiem abonentiem RabbitMQ sistēmā?

sobes.tech AI

Atbilde no AI

RabbitMQ, ziņojumu piegāde vairākiem abonentiem tiek realizēta caur "fanout" tipa maiņām. Šāda maiņa nosūta katru saņemto ziņojumu visām ar to saistītajām rindām. Tādējādi, katrs abonents, klausoties savu rindu, saņems ziņojuma kopiju.

Piemērs C# ar RabbitMQ.Client bibliotēku:

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

Šeit katrs abonents izveido savu rindu un pieslēdz to "fanout" maiņai, saņemot visas ziņas.