Exchange - солилцуур эсвэл солилцооны цэг. Түүн рүү мессеж илгээгддэг. Exchange мессежийг түгээдэг нэг буюу хэд хэдэн дараалалд. Тэр мессежийг дараалал руу чиглүүлдэг үүсгэсэн холбоос дээр үндэслэсэн (bindings) болон дарааллын хооронд.
Exchange биш . Өргөтгөсөн шалтгааны улмаас exchange суулгагдсан өгөгдлийн сан дахь мөр (чиглүүлэлтийн логик байгаа код бүхий модулийн холбоос) юм. . 1 мянган солилцогч ердөө 1 МБ санах ой зарцуулна.
Агуулга
- RabbitMQ. 3-р хэсэг. Дараалал ба холболтын тухай ойлголт
- RabbitMQ. 4-р хэсэг. Мессеж, фрейм гэж юу болох талаар ярилцах
- RabbitMQ. 5-р хэсэг: Зурвасыг хэвлэн нийтлэх, хэрэглэх
- RabbitMQ. 6-р хэсэг. Холбооны болон хүрзний модулиудын тойм
- RabbitMQ. 7-р хэсэг. Холболт ба Chanel-ийн талаарх дэлгэрэнгүй мэдээлэл
- RabbitMQ. 8-р хэсэг. .NET дэх RabbitMQ
- RabbitMQ. 9-р хэсэг. Хяналт
Шууд солилцоо
Direct exchange - шаардлагатай үед хэрэглэнэ тодорхой дараалалд мессеж хүргэх. Мессежийг солилцогчдод тодорхой зааж өгдөг чиглүүлэлтийн түлхүүр мөн ижил төстэй чиглүүлэлтийн түлхүүрээр энэ солилцогчтой холбоотой бүх дараалалд ордог. Чиглүүлэлтийн түлхүүр нь мөр юм. Тохируулгыг ашиглан хийдэг мөрүүдийг тэгш байдлыг шалгах.
Зурвасын урсгалын график дүрслэл:

В rabbitmq гэсэн ойлголт байдаг анхдагч солилцогч. Энэ нь direct exchange Нэргүй. Хэрэв өгөгдмөл солилцогчийг ашигласан бол мессеж нь ижил нэртэй дараалал руу чиглэнэ мессежийг чиглүүлэх түлхүүр.
Сэдвийн солилцоо
Topic exchange - төстэй direct exchange чиглүүлэлтийн түлхүүрийг харьцуулах замаар сонгомол чиглүүлэлт хийх боломжийг олгодог. Гэхдээ энэ тохиолдолд түлхүүрийг өгнө загвараар. Загвар үүсгэхдээ ашиглана уу 0 эсвэл түүнээс олон үг (үсэг AZ и az болон тоонууд 0-9), цэгээр, түүнчлэн тэмдэгээр тусгаарлагдсан * и #.
*- яг сольж болно1үг#-аар сольж болно0эсвэл илүү олон үг
Зурвасын урсгалын график дүрслэл:

Хувилбараас эхлэн RabbitMQ 2.4.0 чиглүүлэлтийн алгоритм topic exchange хүртэл ажиллаж эхэлсэн 145 дахин хурдан. Тэд хандлагыг хэрэгжүүлснээр ийм амжилтанд хүрсэн , энэ нь загваруудыг модны бүтэц болгон төлөөлдөг гэсэн үг юм. Жишээ нь загварууд a.b.c, a.*.b.c, a.#.c и b.b.c дараах бүтцээр төлөөлүүлнэ.

Загвар тохирохыг эхээс нь эхлээд дээрээс доош нь хайна.
Онцлог:
- Энэ солилцогчийг ашиглах нь болно ирээдүйн програм хөгжүүлэх сайн сонголт, учир нь Загваруудыг үргэлж өөрчлөх боломжтой бөгөөд мессежийг ижил төстэй байдлаар нийтлэх боломжтой
direct exchangeбуюуfanout exchange - ашигладаг загварууд
*хамаагүй хурданашигладаг загваруудаас илүү#. topic exchangeудаанdirect exchange
Fanout Exchange
Fanout exchange - бүх мессежийг бүх дараалалд хүргэдэг зурваст чиглүүлэлтийн түлхүүр заасан байсан ч гэсэн.
Онцлог:
RabbitMQчиглүүлэлтийн түлхүүрүүд болон загваруудтай ажиллахгүй гүйцэтгэлд эерэг нөлөө үзүүлдэг. Энэ бол хамгийн хурданexchange;- бүх хэрэглэгчид бүх мессежийг боловсруулах чадвартай байх ёстой;
Зурвасын урсгалын график дүрслэл:

Толгойн солилцоо
Headers exchange - хос (түлхүүр, утга) шинж чанаруудын харьцуулалт дээр үндэслэн мессежийг холбогдох дараалалд чиглүүлдэг. headers холбох ба ижил төстэй мессежийн шинж чанар. headers нь Dictionary<ключ, значение>.
Хэрэв та толь бичигт тусгай түлхүүр нэмбэл x-match үнэ цэнэтэй any, дараа нь хосууд (түлхүүр, утга) хэсэгчлэн таарч байвал мессежийг чиглүүлнэ. Энэ зан үйл нь оператортой төстэй or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");Өгөгдмөл түлхүүр x-match утгыг агуулдаг all. Энэ нь хосууд (түлхүүр, утга) бүрэн тохирох үед мессежийг чиглүүлдэг гэсэн үг юм. Энэ зан үйл нь оператортой төстэй and.
Зурвасын урсгалын график дүрслэл:

Онцлог:
- нэмэлт уян хатан байдал
- тооцооны нэмэлт зардал. Атрибутын бүх хос (түлхүүр, утга).
headersзурвасын чиглүүлэлтийн утгыг тооцоолохын өмнө түлхүүр нэрээр нь эрэмбэлсэн байх ёстой. Бусад төрлийн солилцооноос удаан.
Тогтвортой Hashing солилцоо
Энэ солилцогч нь и суулгаагүй в RabbitMQ.
Consistent-hashing exchange (хэш тууштай солилцоо) - мессеж хүлээн авах боломжит олон дараалал байгаа үед болон тэдгээрийн хооронд тэнцвэрийг ачаалах шаардлагатай үед ашиглагддаг. Мессеж нь жингээр нь дараалалтай холбоотой (нөхцөлт мөрийн утга 0 - n).
Дарааллын эквивалент жин - дараалал бүрийг хүлээн авахыг заана ойролцоогоор ижил хэмжээний мессеж (мессеж бүрийг зөвхөн нэг дараалалд оруулах болно). Мессежийг жигд тараах бүрэн баталгаа байхгүй.
Зурвасын урсгалын график дүрслэл:

Hash чиглүүлэлтийн түлхүүр эсвэл өмч дээр үндэслэн тооцоолно headers зурвасууд. Хэрэв нийтлэгдсэн бүх мессежүүд өөр өөр чиглүүлэлтийн түлхүүртэй байсан бол, эсвэл headers, дараа нь хуваарилалт жингээр явагдана. Үгүй бол чиглүүлэлтийн түлхүүрийг ашиглах болно, эсвэл headers.
Хэрэглэгчийн дамжуулах чадвар нь нэг дараалал ашиглаж байгаа олон хэрэглэгчтэй шийдлээс өндөр өсөх шаардлагатай үед туслах ёстой.
Солигчуудын хослол (E2E)
Бүх солилцооны зан үйлийг харилцаа холбоо ашиглан нэгтгэж болно Exchange-to-Exchange (шилжүүлэгчийн хослолыг техникийн үзүүлэлтэд оруулаагүй болно AMQP. Энэ нь протоколын хажуугийн өргөтгөл юм RabbitMQ).
Зурвасын урсгалын график дүрслэл:

Ийн зардлаар E2E Бид одоогийн болон өсөн нэмэгдэж буй шаардлагын аль алинд нь тохирсон зөв өргөтгөх боломжтой тохиргоог олж чадна.
Бирж үүсгэх
Солигчийг синхрон ашиглан бүтээдэг RPC серверт хүсэлт гаргах. Хүсэлтийг аргыг ашиглан хийдэг Exchange.Declareпараметрүүдээр дуудагдсан:
- солилцооны нэр
- солилцуурын төрөл
- бусад сонголтууд
Бүтээлийн жишээ exchange тусламжтайгаар :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchange- бидний үүсгэхийг хүсч буй солилцооны нэр. Нэр өвөрмөц байх ёстойtype- солилцуурын төрөлdurable- хэрэв суулгасан болtrueДараа ньexchangeбайнгын байх болно. Энэ нь дискэн дээр хадгалагдах бөгөөд сервер/брокерын дахин ачааллыг даван туулах боломжтой болно. Хэрэв үнэ цэнэfalseДараа ньexchangeтүр зуурынх бөгөөд сервер/брокерыг дахин эхлүүлэх үед устгагдах болноautoDelete- автоматаар устгах.Exchangeхолбоотой бүх дарааллыг устгах үед устгагдах болноargumentsнэмэлт аргументууд юм. Ихэнх тохиолдолд аргументуудаар дамжууланalternative exchange(өөр солилцогч). Хэрэв мессеж нь анхны маршрутаар дамжих боломжгүй бол түүнийг өөр замаар дамжуулахын тулд өөр солилцоо руу илгээж болно.

Хэрэв бүтээл бол exchange магадгүй, дараа нь сервер үйлчлүүлэгч рүү синхрон илгээх болно RPC хариулт Exchange.DeclareOk. Хэрэв бүтээл бол боломжгүй юм (хүсэлтээс татгалзсан Exchange.Declare), дараа нь суваг хаагдах болно асинхрон команд ашиглан сервер Channel.Close мөн үйлчлүүлэгч онцгой тохиолдол авах болно , алдааны код болон түүний тайлбарыг агуулсан болно.
Нийтлэхээс өмнө солилцогчийг бий болгох ёстой. Хэрэв та байхгүй солилцогч руу мессеж нийтэлвэл - RabbitMQ чимээгүйхэн арилга.
Exchange GUI үүсгэх
Админ самбар руу очно уу RabbitMQ хэрэглэгчийн доор guest (хэрэглэгчийн нэр: guest болон нууц үг: guest). Хэрэглэгч гэдгийг анхаарна уу guest зөвхөн localhost-оос холбогдох боломжтой. Одоо таб руу орцгооё Exchanges болон дээр дарна уу Add a new exchange. шинж чанаруудыг бөглөнө үү:

Ихэнх үл хөдлөх хөрөнгийг дээр дурдсан болно. Энд бид тогтоосон бол гэдгийг анхаарна уу Internal, дараа нь солилцоог зөвхөн ашиглаж болно E2E. Producer ийм солилцоо руу мессеж илгээх боломжгүй болно.
дүгнэлт
Системийг боловсруулахдаа топологийг тайлбарлах нь тохиромжтой график ашиглан. Гэхдээ график зурж эхлэхээсээ өмнө ачаалал ихтэй замыг тодруулах нь зүйтэй. тэд шаарддаг илүү өндөр дамжуулах чадвар (гүйцэтгэл). Дараа нь та замын хөдөлгөөнийг ангилж болно. Тэгээд барьж эхэлнэ.
Хэрэв баригдсан графикт байгаа бол хязгаарлагдмал олонлог чиглүүлэлтийн түлхүүрүүд, дараа нь, энэ нь хэд хэдэн хайх нь зүйтэй юм fanout exchange, тэдгээр нь чиглүүлэлтийн түлхүүртэй холбоотой 1:1 байна. Гэдгийг санах fanout exchange хамгийн хурдан.
Хэрэв маршрутын тоо хязгааргүй рүү тэмүүлдэг, үүнд анхаарлаа хандуулах нь зүйтэй topic exchange эсвэл загвар шаардлагагүй бол та сонгож болно direct exchnge, учир нь тэр илүү хурдан topic exchange.
Төрөл бүрийн хослолууд exchange зөвийг олоход тань туслах ёстой. өргөтгөх боломжтой тохиргоо, энэ нь одоогийн болон өсөн нэмэгдэж буй системийн шаардлагуудыг хангадаг.
Тоо exchange болон дараалал нь маршрутын тоотой харьцуулахад хамгийн бага байх ёстой.
Дараагийн өгүүллээр бид дараалал ба холболтын талаар илүү ихийг ойлгож эхлэх болно.
лавлагаа
Эх сурвалж: www.habr.com
