rabbitMQ教程(三)一篇文章看懂rabbitMQ


一、rabbitMQ是什么:

  RabbitMQ,遵循AMQP協議,由內在高並發的erlanng語言開發,用在實時的對可靠性要求比較高的消息傳遞上。

  學過websocket的來理解rabbitMQ應該是非常簡單的了,websocket是基於服務器和頁面之間的通信協議,一次握手,多次通信。 而rabbitMQ就像是服務器之間的socket,一個服務器連上MQ監聽,而另一個服務器只要通過MQ發送消息就能被監聽服務器所接收。

  但是MQ和socket還是有區別的,socket相當於是頁面直接監聽服務器。而MQ就是服務器之間的中轉站,例如郵箱,一個人投遞信件給郵箱,另一個人去郵箱取,他們中間沒有直接的關系,所以耦合度相比socket小了很多。

  

上圖是最簡單的MQ關系,生產者-MQ隊列-消費者

 

 二、MQ使用場景:

  別啥固定式使用場景了,說的透徹一點,他就是服務器之間通信的,前面博文中提到的Httpclient也可以做到,但是這個相對於其他通信在中間做了一個中間倉庫。

  好處1:降低了兩台服務器之間的耦合,哪怕是一台服務器掛了,另外一台服務器也不會報錯或者休克,反正他監聽的是MQ,只要服務器恢復再重新連上MQ發送消息,監聽服務器就能再次接收。

  好處2:MQ作為一個倉庫,本身就提供了非常強大的功能,例如不再是簡單的一對一功能,還能一對多,多對一,自己腦補保險箱場景,只要有特定的密碼,誰都能存,誰都能取。也就是說能實現群發消息和以此衍生的功能。   

  好處3:現在普遍化的持久化功能,當MQ掛掉可以存儲在磁盤等下重啟恢復。(需要設置)

 

 

   

三、專業術語介紹:

1. 生產者: 在現實生活中就好比制造商品的工廠,他們是商品的生產者。生產者只意味着發送。發送消息的程序稱之為一個生產者。

2. 隊列:rabbitMQ就像一個倉庫,一個倉庫里面可以 有很多隊列,每個隊列才是服務器之間消息通信的載體。

3.消費者:消費者就好比是從商店購買或從倉庫取走商品的人,消費的意思就是接收。消費者是一個程序,主要是等待接收消息。

4.交換器:在生產者和消息隊列之間的交換器,功能類似於網絡寬帶的交換機,可以根據不同的關鍵字,將信息發送到不同的隊列。

上圖的E就是交換器,通過關鍵字綁定,如果生產者給的消息中指定類型是ERROR,就給隊列1,如果是INFO或者WARN就給隊列2。當然也可以一個關鍵字綁定兩個隊列。(INFO等字段自己可以定義,也可以用*,#來匹配。*(星號)表示一個單詞#(井號)表示零個或者多個單詞。 比如ok.yes可以被ok.*匹配到)

5.臨時隊列:根據需求臨時創建的一條隊列,在斷開連接后自動刪除。

 

 四、流程介紹:

  生產者發送一條消息給交換機——交換機根據關鍵字匹配到對應的隊列——將消息存入隊列——消費者從隊列中取出消息使用。

 

 五、一些細節說明

       MQ不能進行批量的消息處理,你看到的傳輸再多也只是消息被一條一條的存入隊列,消費者從隊列中一條一條的取出。這kafKa有區別,所以在效率上比不上kafKa,但是MQ主打的是穩定。

  每次消費者取出消息時會通知隊列,我拿到了,當隊列接收到這條消息,就會把消息刪除,這是默認的ACK機制。如果在接收消息之后,消費者掛掉,或者任何情況沒有返回ack,隊列中這條消息將不會刪除,可以一直存着,等待其他消費者來取。    注意,但是如果設置不返回ack,在不斷的發送消息到隊列又不刪除,會導致MQ倉庫boom~~~~

  

下一章:介紹spring-rabbitmq整合的簡單用法。

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM