1. 程式人生 > >一篇文章看懂rabbitMQ

一篇文章看懂rabbitMQ

看到一篇寫得比較好的文章,轉載已做記錄。
轉載於:https://www.cnblogs.com/tohxyblog/p/7256343.html
一、rabbitMQ是什麼:
  RabbitMQ,遵循AMQP協議,由內在高併發的erlanng語言開發,用在實時的對可靠性要求比較高的訊息傳遞上。

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

但是MQ和socket還是有區別的,socket相當於是頁面直接監聽伺服器。而MQ就是伺服器之間的中轉站,例如郵箱,一個人投遞信件給郵箱,另一個人去郵箱取,他們中間沒有直接的關係,所以耦合度相比socket小了很多。
上圖是最簡單的MQ關係,生產者-MQ佇列-消費者


  
上圖是最簡單的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~~~~

轉載於:https://www.cnblogs.com/tohxyblog/p/7256343.html