Junior — Middle
Πώς πραγματοποιείται η παράδοση μηνυμάτων σε πολλούς συνδρομητές στο σύστημα RabbitMQ;
sobes.tech AI
Απάντηση από AI
Στο RabbitMQ, η παράδοση μηνυμάτων σε πολλούς συνδρομητές πραγματοποιείται μέσω διαμεταγωγέων τύπου "fanout". Ένας τέτοιος διαμεταγωγέας στέλνει κάθε ληφθέν μήνυμα σε όλες τις ουρές που είναι συνδεδεμένες σε αυτόν. Με αυτόν τον τρόπο, κάθε συνδρομητής που ακούει τη δική του ουρά θα λάβει ένα αντίγραφο του μηνύματος.
Παράδειγμα σε C# με τη βιβλιοθήκη RabbitMQ.Client:
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);
Εδώ, κάθε συνδρομητής δημιουργεί τη δική του ουρά και τη συνδέει με τον "fanout" διαμεταγωγέα, λαμβάνοντας όλα τα μηνύματα.