RabbitMQ~說說Exchange的幾種模式
RabbitMQ里(li)的(de)Exchange提供了四種模式,或者叫它類(lei)型,它們(men)是fanout,direct,topic和(he)header,其中前(qian)三種模式我們(men)用的(de)比較(jiao)多,所有(you)我們(men)主要(yao)介紹(shao)前(qian)3種!
Direct
任何發(fa)送到Direct Exchange的消息都會被轉發(fa)到RouteKey中指(zhi)定的Queue。
1.一般情況(kuang)可以使(shi)用rabbitMQ自帶的Exchange:”"(該Exchange的名(ming)字(zi)為空字(zi)符串,下文稱其為default Exchange)。
2.這種模(mo)式下不需要將(jiang)Exchange進(jin)行任何綁定(binding)操(cao)作
3.消息傳遞(di)時需(xu)要一個“RouteKey”,可以簡單的(de)理解為要發(fa)送到的(de)隊列名字。
4.如果vhost中(zhong)(zhong)不(bu)存在RouteKey中(zhong)(zhong)指定的隊列名,則該消息會被拋棄。
Fanout
任何發(fa)送到Fanout Exchange的(de)消息都會被轉發(fa)到與該Exchange綁(bang)定(ding)(Binding)的(de)所有Queue上。
1.可以理(li)解為路由表的(de)模(mo)式
2.這種(zhong)模式不需(xu)要RouteKey
3.這種模式需(xu)要(yao)提前(qian)將Exchange與Queue進行綁(bang)定(ding),一個Exchange可以綁(bang)定(ding)多(duo)個Queue,一個Queue可以同多(duo)個Exchange進行綁(bang)定(ding)。
4.如果(guo)接受到消息(xi)的Exchange沒有(you)與(yu)任何Queue綁(bang)定(ding),則消息(xi)會被拋棄。
Topic
任何(he)發送到Topic Exchange的(de)消息都會被轉發到所有關心RouteKey中指定話題的(de)Queue上
1.這種模(mo)式較為復(fu)雜,簡(jian)單來(lai)說(shuo),就是每個隊(dui)列(lie)都(dou)有其關心(xin)的主(zhu)題(ti),所(suo)(suo)有的消息都(dou)帶有一個“標題(ti)”(RouteKey),Exchange會(hui)將(jiang)消息轉發到(dao)所(suo)(suo)有關注主(zhu)題(ti)能與RouteKey模(mo)糊匹配的隊(dui)列(lie)。
2.這種(zhong)模(mo)式需(xu)要RouteKey,也許要提(ti)前綁定Exchange與Queue。
3.在進行(xing)綁定時,要提供一(yi)個(ge)該(gai)隊列關心(xin)的主題,如“#.log.#”表示(shi)該(gai)隊列關心(xin)所有涉及log的消息(一(yi)個(ge)RouteKey為”MQ.log.error”的消息會被(bei)轉發到該(gai)隊列)。
4.“#”表(biao)示0個或若干個關(guan)鍵(jian)字,“*”表(biao)示一個關(guan)鍵(jian)字。如(ru)“log.*”能與(yu)“log.warn”匹(pi)配,無法與(yu)“log.warn.timeout”匹(pi)配;但是“log.#”能與(yu)上述兩者(zhe)匹(pi)配。
5.同樣,如果Exchange沒有發現能夠(gou)與RouteKey匹配的Queue,則會拋棄(qi)此消息。
感謝各位的閱讀!