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

1、rabbitMQ是什麼:

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

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

  可是MQ和socket仍是有區別的,socket至關因而頁面直接監聽服務器。而MQ就是服務器之間的中轉站,例如郵箱,一我的投遞信件給郵箱,另外一我的去郵箱取,他們中間沒有直接的關係,因此耦合度相比socket小了不少。服務器

  

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

 

 2、MQ使用場景:

  別啥固定式使用場景了,說的透徹一點,他就是服務器之間通訊的,前面博文中提到的Httpclient也能夠作到,可是這個相對於其餘通訊在中間作了一箇中間倉庫。網絡

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

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

  好處3:如今廣泛化的持久化功能,當MQ掛掉能夠存儲在磁盤等下重啓恢復。(須要設置)高併發

 

 

   

3、專業術語介紹:

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

2. 隊列:rabbitMQ就像一個倉庫,一個倉庫裏面能夠 有不少隊列,每一個隊列纔是服務器之間消息通訊的載體。

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

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

上圖的E就是交換器,經過關鍵字綁定,若是生產者給的消息中指定類型是ERROR,就給隊列1,若是是INFO或者WARN就給隊列2。固然也能夠一個關鍵字綁定兩個隊列。(INFO等字段本身能夠定義,也能夠用*,#來匹配。*(星號)表示一個單詞#(井號)表示零個或者多個單詞。 好比ok.yes能夠被ok.*匹配到)spa

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

 

 4、流程介紹:

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

 

 5、一些細節說明

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

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

  

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

相關文章
相關標籤/搜索