Sobes.tech
Junior — Middle

Կարող եք բացատրել Exchange կոնցեպտը RabbitMQ-ում և այն ինչպես է գործում հաղորդագրությունների փոխանցման ժամանակ?

sobes.tech AI

Պատասխան AI-ից

RabbitMQ-ում Exchange-ը բաղադրիչ է, որը ստանում է հաղորդագրությունները արտադրողներից (producers) և ուղարկում դրանք որոշակի կանոնների, որոնք կոչվում են ռոուտինգ (routing), համապատասխան հերթերին (queues):

Հիմնական տեսակները՝

  • Direct — հաղորդագրությունը ուղարկվում է հերթին, եթե ռոուտինգի բանալին համընկնում է հերթի բանալու հետ:
  • Fanout — ուղարկում է հաղորդագրությունը բոլոր կապակցված հերթերին:
  • Topic — ռոուտինգը կատարվում է բանալիների ձևանմուշների հիման վրա:
  • Headers — ռոուտինգը կատարվում է հաղորդագրության գլխարկների հիման վրա:

Օրինակ՝

  1. արտադրողը ուղարկում է հաղորդագրություն ռոուտինգի բանալու հետ:
  2. Exchange-ը ստուգում է կանոնները և կապում հաղորդագրությունը մեկ կամ մի քանի հերթերի հետ:
  3. հաղորդագրությունը հասնում է հերթին, որտեղից այն վերցնում է սպառողը:

Այսպիսով՝

  • Այս մեթոդը ապահովում է հաղորդագրությունների ճկուն ռոուտինգ և համակարգի ընդլայնում:
  • 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);

string message = "Hello RabbitMQ!";
var body = Encoding.UTF8.GetBytes(message);

channel.BasicPublish(exchange: "logs", routingKey: "", basicProperties: null, body: body);
Console.WriteLine(" [x] Sent {0}", message);