Exchange中durable參數(shù)指定exchange是否持久化榴徐,exchange參數(shù)指定exchange名稱既峡,type指定exchange類型羡榴。Exchange類型有direct,fanout和topic涧狮。
Bind是將exchange與queue進行關(guān)聯(lián)炕矮,exchange參數(shù)和queue參數(shù)分別指定要進行bind的exchange和queue,routing_key為可選參數(shù)者冤。
Exchange的三種模式:
Direct:
任何發(fā)送到Direct Exchange的消息都會被轉(zhuǎn)發(fā)到routing_key中指定的Queue
1.一般情況可以使用rabbitMQ自帶的Exchange:””(該Exchange的名字為空字符串)肤视;
2.這種模式下不需要將Exchange進行任何綁定(bind)操作;
3.消息傳遞時需要一個“routing_key”涉枫,可以簡單的理解為要發(fā)送到的隊列名字邢滑;
4.如果vhost中不存在routing_key中指定的隊列名,則該消息會被拋棄。
Demo中雖然聲明了一個exchange='yanfa'和queue='anheng'的bind困后,但是在后面發(fā)送消息時并沒有使用該exchange和bind乐纸,而是采用了direct的模式,沒有指定exchange摇予,而是指定了routing_key的名稱為隊列名汽绢,消息將發(fā)送到指定隊列。
如果一個exchange 聲明為direct侧戴,并且bind中指定了routing_key,那么發(fā)送消息時需要同時指明該exchange和routing_key.
Fanout:
任何發(fā)送到Fanout Exchange的消息都會被轉(zhuǎn)發(fā)到與該Exchange綁定(Binding)的所有Queue上
1.可以理解為路由表的模式
2.這種模式不需要routing_key
3.這種模式需要提前將Exchange與Queue進行綁定宁昭,一個Exchange可以綁定多個Queue,一個Queue可以同多個Exchange進行綁定酗宋。
4.如果接受到消息的Exchange沒有與任何Queue綁定积仗,則消息會被拋棄。
Demo中創(chuàng)建了一個將一個exchange和一個queue進行fanout類型的bind.但是發(fā)送信息時沒有用到它蜕猫,如果要用到它寂曹,只要在發(fā)送消息時指定該exchange的名稱即可,該exchange就會將消息發(fā)送到所有和它bind的隊列中回右。在fanout模式下隆圆,指定的routing_key是無效的 。
Topic:
任何發(fā)送到Topic Exchange的消息都會被轉(zhuǎn)發(fā)到所有關(guān)心routing_key中指定話題的Queue上
1.這種模式較為復雜翔烁,簡單來說匾灶,就是每個隊列都有其關(guān)心的主題,所有的消息都帶有一個“標題”(routing_key)租漂,Exchange會將消息轉(zhuǎn)發(fā)到所有關(guān)注主題能與routing_key模糊匹配的隊列阶女。
2.這種模式需要routing_key,也許要提前綁定Exchange與Queue哩治。
3.在進行綁定時秃踩,要提供一個該隊列關(guān)心的主題,如“#.log.#”表示該隊列關(guān)心所有涉及l(fā)og的消息(一個routing_key為”MQ.log.error”的消息會被轉(zhuǎn)發(fā)到該隊列)业筏。
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)能夠與routing_key匹配的Queue寻狂,則會拋棄此消息。