Exchange
- солилцуур эсвэл солилцооны цэг. Түүн рүү мессеж илгээгддэг. Exchange
мессежийг түгээдэг нэг буюу хэд хэдэн дараалалд. Тэр мессежийг дараалал руу чиглүүлдэг үүсгэсэн холбоос дээр үндэслэсэн (bindings
) болон дарааллын хооронд.
Exchange
биш exchange
суулгагдсан өгөгдлийн сан дахь мөр (чиглүүлэлтийн логик байгаа код бүхий модулийн холбоос) юм.
Агуулга
RabbitMQ. 1-р хэсэг. Оршил. Erlang, AMQP болон RPC RabbitMQ. 2-р хэсэг. Солилцооны тухай ойлголт - 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