參考:https://www.rabbitmq.com/tutorials/tutorial-three-dotnet
在工作佇列中,一個訊息只會投遞一個消費者,但是釋出訂閱模式,同一個訊息可以傳送個多個消費者。
(交換)Exchanges
rabbitMQ的核心是把生產者把訊息傳送給exchange,這個x一邊是從p接收訊息,一邊是把這些訊息推送給佇列。生產者是不會發訊息給佇列的,都是靠這個x,所以為了讓x知道這個我該怎麼處理p發過來的訊息,就要指定exchange的型別。它的型別有五種:direct,topic,headers和fanout。
一、Fanout型別:廣播所有訊息給它所知道的佇列。
如果exchange傳空字串,就會使用預設的無命名交換,那就會根據routingKey值投送給對應的消費者。
在exchange和佇列之間建立聯絡,依靠的是binding,消費者bindingexchange的key值就建立了聯絡。
二、Direct型別:它的作用是在廣播的基礎上,過濾出特定的訊息,fanout型別會忽略binding-key,但是direct會命名一個binding key,引數同樣是傳給routing-key,那麼定義了相同型別的binding key,都會就收到同樣的訊息,也就是重複的,這也算是一種限定型別的廣播方式。
三、Topics型別:它是在Direct上的bind key上做了一些改動,讓消費者更靈活的處理訊息,direct型別的binding key都是一個單詞,而topics是用.隔開的多個單詞,比如:stock.usd.nyse,還可以加上#、*符號的binding key。
#替代0個或多個單詞,
*替代一個單詞。
舉例:*.orange.*,這個匹配三個單詞的key,並且中間的key一定要是orange,比如odd.orange.odd的消費者就會被投遞。lazy.#,這個匹配lazy開頭,後面任意個單詞的key值,比如lazy、lazy.doing、lazy.dd.oo的消費者都會收到訊息。
四:headers型別:它是根據返回的reqeuest的訊息頭來確定的,比如200 ok、500 error 等。