Въвеждането: В RabbitMQ всички съобщения, изпращани от производителите, се приемат от Exchange, който след това ги препраща към Queue за съхранение според специфична политика RabbitMQ предлага четири типа обмени: fanout, direct, topic и header Режимът на заглавие е по-рядко използван на практика, а тази статия сравнява само първите три режима.
1. Директен обмен
Всички съобщения, изпратени до Direct Exchange, се препращат към опашката, посочена в RouteKey.
1. Общо взето, можете да използвате Exchange, който идва с rabbitMQ:" (името на Exchange е празен низ, наричан по-нататък стандартният Exchange).
2. В този режим няма нужда да се извършват никакви операции за свързване в Exchange
3. За съобщенията е необходим "RouteKey", който може просто да се разбере като името на опашката, към която трябва да се изпрати.
4. Ако името на опашката, посочено в RouteKey, не съществува във vhost-а, съобщението се прекъсва.
2. Размяна на разклонения
Всички съобщения, изпратени до Fanout Exchange, се препращат към всички опашки, свързани с тази Exchange.
1. Може да се разбере като модел на таблицата за маршрутизиране
2. Този режим не изисква RouteKey
3. Този режим изисква предварително обвързване на Exchange с опашка, една Exchange може да обвърже няколко опашки, а една опашка може да бъде обвързана с няколко Exchange.
4. Ако борсата, която е получила съобщението, не е обвързана с никаква опашка, съобщението се прекъсва.
3. Обмен на теми
Всички съобщения, изпратени до Обмена на теми, се препращат към всички опашки, които се интересуват от темите, посочени в RouteKey
1. Този модел е по-сложен, просто казано, всяка опашка има собствена тема на загриженост, всички съобщения имат "заглавие" (RouteKey), а Exchange препраща съобщението към всички опашки, които могат фугово да съвпаднат с RouteKey на темата, която се интересува.
2. Този режим изисква RouteKey, може би предварително свързване на Exchange и Queue.
3. При свързване се предоставя тема, която интересува опашката, например "#.log.#", за да се покаже, че опашката се интересува от всички съобщения, свързани с логове (съобщение с RouteKey на "MQ.log.error" ще бъде препратено към опашката).
4. "#" означава 0 или няколко ключови думи, а "" означава една ключова дума. Например, "log". Може да съвпадне с "log.warn", но не може да съвпадне с "log.warn.timeout"; Но "log.#" съвпада с горното.
5. По същия начин, ако Exchange не намери опашка, която съвпада с RouteKey, ще изхвърли това съобщение.
|