rabbitmq 實踐與學習心得分享(1)

一.寫在前面

半年前新加入一家公司,發現公司所用的產品中引入了rabbitmq 這個消息中間件。引用rabbitmq 主要用來解決如下幾個問題:mysql

  • 發送消息:做爲發送消息的載體,好比發送系統消息,微信,短信,email等形式消息。

  • mysql 數據異構存儲:業務側爲了支持全文索引,引入了elasticSearch中間件,每次針對業務數據的增,刪,改,都會發送消息到rabbitmq,而後由消費端將變動的數同步到到elasticSearch 中。

  • 緩存數據的更新:針對一些應用比較頻繁的數據,系統引入了redis做爲緩存存儲,在業務數據發生變動的時候,相應的變動須要同步到redis。
    .

做爲業務開發人員,在平常的開發過程當中每每會將rabbitmq看作是一個黑盒,僅僅侷限於調用相關的API 進行消息的發送與消費操做,可是做爲一個合格的開發人員,咱們仍是有必要對於咱們用到的一些開源工具備必定的瞭解,相信每個開發人員心理都有一個技術夢,哈哈。好了,閒話很少說,讓咱們開始學習和了解rabbitmq 吧。redis

二. 初識rabbitmq

在瞭解rabbitmq 以前,我以爲有必要先了解一下消息中間件,那麼什麼是消息中間件呢?個人理解,消息中間件就是利用高效可靠的消息通訊機制,來實現異構系統的協同。它可以屏蔽不一樣平臺系統的語言以及一些特性的差別,實現系統的解耦。sql

消息中間件經常使用的場景有哪些呢?緩存

  • 消息通訊 (如上面的第一種場景)
  • 異步解耦(如上面的第2,3種場景)
  • 流量削峯

消息中間件通常傳遞消息有哪幾種模式呢?微信

  • P2P(點對點)模式 : 點對點模式通常是基於隊列的,生產者發送消息到隊列,消費者從隊列中接收消息。 這種用於一對一通訊,即一條消息只會被一個消費者消費。 異步

  • 發佈訂閱(pub/sub)模式:消息生產者發佈消息到某個topic,消息消費者則從消息主題中訂閱消息,這種用於一對多廣播模式,即一條消息能夠被多個消費者消費。 工具

1)rabbitmq 相關概念介紹

在瞭解rabbitmq以前,有必要對rabbitmq 涉及到的一些概念模型作個介紹:學習

  • AMQP(advance message queue protocal):高級隊列消息協議。Rabbitmq 是基於erlang 語言對於AMQP 協議的實現。spa

    amqp協議詳細介紹:docs.oasis-open.org/amqp/core/v…3d

  • 生產者: 就是發送投遞消息的一方.

  • 消費者: 就是接收消費消息的一方.

  • broker:消息中間件的服務節點.

  • queue: rabbitmq的內部對象,用來存儲消息。

  • exchange:交換器

  • routingkey,bindingkey:指定消息的路由規則

  • vhost:虛擬主機

說明:我的理解exchange看作是消息的中轉中心,queue 看作是消息的存儲中心,具體這條消息中轉路由到哪一個queue,須要結合exchange的類型和routingkey ,以及bindingkey 來完成。而queue,exchange,和綁定關係針對每個vhost都是相對獨立的。
複製代碼

2) rabbitmq exchange 的介紹:

rabbitmq 的exchange 主要有幾種類型:fanout,direct,topic,header ,每一種分別表示不一樣的路由規則:
複製代碼
  • fanout:將消息路由到與exchange 綁定的全部隊列中。和routingkey 無關:

  • direct:將消息路由到Bingdingkey 與routingkey 徹底匹配的隊列中。

  • topic :將消息路由到Bingdingkey 與routingkey 匹配的隊列中,注意這裏的匹配支持模糊匹配。 routingkey和bindingkey 中含.的字符串被拆分紅一個個單詞:#用於匹配一個單詞,*用於匹配多個單詞。 以下圖:com.rabbitmq.demo會匹配到queue1和queue2 ,com.hidden.client只會路由到queue2

header:基於消息頭中的屬性進行匹配,通常不用這種。

三.後記 rabbitmq 如何保證消息的可靠傳輸的呢?

在業務開發過程當中,面對rabbitmq這麼個黑盒子,咱們腦中經常會有一點疑惑?rabbitmq 能保證個人消息能正常的發送,正常的被消費而不丟失嗎?它是如何作到的呢?

rabbitmq 要作到這點,其實採用了不少手段和機制:   
  * 消息發送端:支持事務消息,發送者確認機制;---保證消息順利發送到broker消息。  
  * 持久化,鏡像隊列機制----保證消息能成功落盤,以及高可用性。
  * 消息消費端:---消息者確認機制,等等。
  
  一些具體的細節,在第2節中繼續分享個人學習心得。
複製代碼
相關文章
相關標籤/搜索