RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
一.Direct Exchange
任何發(fā)送到Direct Exchange的消息都會被轉(zhuǎn)發(fā)到RouteKey中指定的Queue。
1.一般情況可以使用rabbitMQ自帶的Exchange:”"(該Exchange的名字為空字符串,下文稱其為default Exchange)。
2.這種模式下不需要將Exchange進(jìn)行任何綁定(binding)操作
3.消息傳遞時需要一個“RouteKey”,可以簡單的理解為要發(fā)送到的隊(duì)列名字。
4.如果vhost中不存在RouteKey中指定的隊(duì)列名,則該消息會被拋棄。
?
二.Fanout Exchange?
?
任何發(fā)送到Fanout Exchange的消息都會被轉(zhuǎn)發(fā)到與該Exchange綁定(Binding)的所有Queue上。
1.可以理解為路由表的模式
2.這種模式不需要RouteKey
3.這種模式需要提前將Exchange與Queue進(jìn)行綁定,一個Exchange可以綁定多個Queue,一個Queue可以同多個Exchange進(jìn)行綁定。
4.如果接受到消息的Exchange沒有與任何Queue綁定,則消息會被拋棄。
?
三.Topic Exchange
?
任何發(fā)送到Topic Exchange的消息都會被轉(zhuǎn)發(fā)到所有關(guān)心RouteKey中指定話題的Queue上
1.這種模式較為復(fù)雜,簡單來說,就是每個隊(duì)列都有其關(guān)心的主題,所有的消息都帶有一個“標(biāo)題”(RouteKey),Exchange會將消息轉(zhuǎn)發(fā)到所有關(guān)注主題能與RouteKey模糊匹配的隊(duì)列。
2.這種模式需要RouteKey,也許要提前綁定Exchange與Queue。
3.在進(jìn)行綁定時,要提供一個該隊(duì)列關(guān)心的主題,如“#.log.#”表示該隊(duì)列關(guān)心所有涉及l(fā)og的消息(一個RouteKey為”MQ.log.error”的消息會被轉(zhuǎn)發(fā)到該隊(duì)列)。
4.“#”表示0個或若干個關(guān)鍵字,“*”表示一個關(guān)鍵字。如“l(fā)og.*”能與“l(fā)og.warn”匹配,無法與“l(fā)og.warn.timeout”匹配;但是“l(fā)og.#”能與上述兩者匹配。
5.同樣,如果Exchange沒有發(fā)現(xiàn)能夠與RouteKey匹配的Queue,則會拋棄此消息。
?http://hwcrazy.com/2a31095868c811e3ad76000d601c5586/group/free_open_source_project/
轉(zhuǎn)載于:https://www.cnblogs.com/tianciliangen/p/4199182.html
總結(jié)
以上是生活随笔為你收集整理的RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iis 7.5应用程序池自动停止
- 下一篇: UIImage指定区域自由拉伸