當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot高级消息-RabbitMQ运行机制
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot高级消息-RabbitMQ运行机制
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
RabbitMQ的核心運行機制,首先在我們高級消息隊列的路由機制,這個和JMS是有大差別的,他給我們增加了Exchange和Bindding,Exchange就是我們介紹的交換器,和Binding綁定的路由規(guī)則,那我們一個消息是如何從一個生產(chǎn)者到消費者呢,它是這樣的,首先我們這個生產(chǎn)者,他給我們生產(chǎn)了一個消息,準(zhǔn)備發(fā)布到哪個隊列上,我們生產(chǎn)者先把消息發(fā)給Broker,也就是我們的消息代理,也就是我們的服務(wù)器,而這個服務(wù)器呢,收到消息以后,他把這個消息,給到一個合適的交換器,這個交換器呢,它是和我們這個消息隊列來進行綁定的,我們服務(wù)器中有非常多的交換器,有非常多的消息隊列,消息給交換器以后,交換器根據(jù)消息攜帶過來的路由件,來判斷,我是要交給你這個隊列,還是交給這個隊列,還是交給這個隊列,還是我一起都交給他們,交換器通過這個綁定規(guī)則,交給隊列以后,我們接下來消費者,就可以連接上這些隊列,來取出相應(yīng)的消息了,核心就是這個交換器,和綁定規(guī)則,交換器不同,綁定規(guī)則不同,那我們派發(fā)消息的這個結(jié)果,就不一樣
之前我們介紹交換器有四種類型,一種是direct,還有fanout,topic,還有headers,headers我們就不說了,后來用的呢非常少,他不是路由件來判斷的,而是由高級消息隊列的消息頭,那我們就直接來說前三種,第一種我們叫direct,這個是直連型的交換器,他的作用呢,就是當(dāng)我們發(fā)送消息時的這個路由件,和我們綁定件一模一樣的時候,消息就會派發(fā)給這個隊列,舉一個例子,我們這里有一個交換器,他的類型呢,是direct,他下邊綁定了幾個消息隊列,比如是接收路由為dog的消息,而這個綁定規(guī)則,是來接收路由key為dogpuppy這個消息,如果我們發(fā)了一個消息,我們自己的路由件,叫dog,那么直連就會找到dog這個規(guī)則,對應(yīng)的這個消息隊列,把這個消息放進去,其他的都不會放,只有發(fā)消息的路由件,跟我們綁定的路由件,完全一致的時候,我們才會給你發(fā)過來,這就是典型的點對點通信模型
Fanout Exchange這個就非常簡單了,如果說我們有一個交換器,是Fanout類型,他下面綁定了比如幾個消息隊列,當(dāng)我們一個消息抵達fanout交換器以后,不管你這個消息的路由件是什么,它會把這個消息給里面的所有隊列,每人都去發(fā)一份,這個就是我們說的廣播模式,這個發(fā)送消息的速度,是最快的,這也是我們實現(xiàn)JMS里邊,發(fā)布訂閱模型的,一個參考實現(xiàn),還有我們Topic Exchange,他就更復(fù)雜了,它允許我們對路由件,來做一些模糊匹配,然后有選擇性的,把它發(fā)給某一個隊列,比如我們Exchange是Topic Exchange,他下面綁定了四個隊列,而第一個隊列他綁定時,用的是usa.#,這個#是一個通配符,通配符允許#和*,#可以匹配0個或多個單詞,*能匹配一個單詞,他們是單詞級別的匹配,我們回過來說,如果Exchange下邊綁定了四個消息隊列,第一個綁定線叫usa.#,相當(dāng)于后邊可以是任意一個單詞,第二個叫#.news,前面可以是任意一個單詞,#weather,前面是任意一個單詞,后面是weather,europe.#,這個是后邊是任意單詞,前面是europe,那如果我們來發(fā)送消息,第一個消息我們寫的鍵,叫usa.news,那符合哪個呢,首先usa.#是符合的,只要是usa開頭的,不管后邊是哪個單詞,都行,那么這個消息會被放到這個隊列,還會放到哪個隊列呢,還會放到#.news,因為它是usa.news,它是一個新聞,我們這一塊綁定的key是news,前面這個單詞我們無所謂,都可以來進行模糊匹配,他就可以來發(fā)給這個內(nèi)容,所以這個消息可以發(fā)到這兩個隊列上去,那剩下的也都一樣,比如所有是weather的,不管是usa的還是europe的,都會來帶weather的消息隊列里面,所有以europe開頭的,不管你是news還是weather的消息,都會根據(jù)規(guī)則來到這個隊列里面,所有以news結(jié)尾的,不管你是usa的news還是europe的news,都會來到這個隊列里邊,這就是我們說的有選擇性的,進行某種模式進匹配以后,我們再來決定發(fā)給哪個消息隊列,那么總結(jié)起來來說,第一個根據(jù)路由件將消息發(fā)給指定的隊列,我們說的單播模式,第二種,我們不管路由件發(fā)給我們綁定的交換器的所有消息隊列,就是我們說的廣播模式,第三種是根據(jù)路由件的匹配,我們有選擇性的進行廣播
?
總結(jié)
以上是生活随笔為你收集整理的SpringBoot高级消息-RabbitMQ运行机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot高级消-息-Rabb
- 下一篇: SpringBoot高级-消息-Rabb