RabbitMQ (一) 簡介和基本概念

一.簡介

MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術(RPC)。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

AMQP(Advanced Message Queuing Protocol)高級消息隊列協議是應用層協議的一個開放標準,為面向消息的中間件設計。

消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。

RabbitMQ是一個開源的AMQP實現,是一款流行的開源消息隊列系統,服務器端用Erlang語言編寫,支持多種客戶端。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗.

二.基本概念

ConnectionFactory(連接工廠)

生產Connection的的工廠

Connection(連接)

RabbitMQ的socket的長鏈接,它封裝了socket協議相關部分邏輯

Channel(頻道|信道)

建立在Connection連接之上的一種輕量級的連接,我們大部分的業務操作是在Channel這個接口中完成的,包括定義隊列的聲明queueDeclare、交換機的聲明exchangeDeclare、隊列的綁定queueBind、發佈消息basicPublish、消費消息basicConsume等。如果把Connection比作一條光纖電纜的話,那麼Channel信道就比作成光纖電纜中的其中一束光纖。一個Connection上可以創建任意數量的Channel。

RabbitMQ (一) 簡介和基本概念

RabbitMQ (一) 簡介和基本概念

Producer(生產者)

生產者用於發佈消息

Exchange(交換機)

生產者會將消息發送到交換機,然後交換機通過路由策略(規則)將消息路由到匹配的隊列中去.

Routing Key(路由鍵)

一個String值,用於定義路由規則,在隊列綁定的時候需要指定路由鍵,在生產者發佈消息的時候需要指定路由鍵,當消息的路由鍵和隊列綁定的路由鍵匹配時,消息就會發送到該隊列。

Queue(隊列)

用於存儲消息的容器,可以看成一個有序的數組,生產者生產的消息會發送到交換機中,最終交換機將消息存儲到某個或某些隊列中,隊列可被消費者訂閱,消費者從訂閱的隊列中獲取消息。

Binding(綁定)

Binding並不是一個概念,而是一種操作,RabbitMQ中通過綁定,以路由鍵作為橋樑將Exchange與Queue關聯起來(Exchange—>Routing Key—>Queue),這樣RabbitMQ就知道如何正確地將消息路由到指定的隊列了,通過queueBind方法將Exchange、Routing Key、Queue綁定起來.

Consumer(消費者)

用於從隊列中獲取消息,消費者只需關注隊列即可,不需要關注交換機和路由鍵,消費者可以通過basicConsume(訂閱模式可以從隊列中一直持續的自動的接收消息)或者basicGet(先訂閱消息,然後獲取單條消息,再然後取消訂閱,也就是說basicGet一次只能獲取一條消息,如果還想再獲取下一條還要再次調用basicGet)來從隊列中獲取消息

vhost(虛擬主機):

每一個RabbitMQ服務器都能創建虛擬消息服務器,我們稱之為虛擬主機。每一個vhost本質上是一個mini版的RabbitMQ服務器,擁有自己的交換機、隊列、綁定等,擁有自己的權限機制。vhost之於Rabbit就像虛擬機之於物理機一樣。他們通過在各個實例間提供邏輯上分離,允許為不同的應用程序安全保密的運行數據,這很有,它既能將同一個Rabbit的眾多客戶區分開來,又可以避免隊列和交換器的命名衝突。RabbitMQ提供了開箱即用的默認的虛擬主機“/”,如果不需要多個vhost可以直接使用這個默認的vhost,通過使用缺省的guest用戶名和guest密碼來訪問默認的vhost.

vhost之間是相互獨立的,這避免了各種命名的衝突,就像App中的沙盒的概念一樣,每個沙盒是相互獨立的,且只能訪問自己的沙盒,以保證非法訪問別的沙盒帶來的安全隱患。

三.核心思想

RabbitMQ中消息傳遞模型的核心思想是生產者永遠不會將任何消息直接發送到隊列.

實際上,生產者通常甚至不知道消息是否會被傳遞到任何隊列.

相反,生產者只能向交換機發送消息

交換是一件非常簡單的事情.一方面,它接收來自生產者的消息;另一方面將它們推送到隊列.交換機必須確切知道如何處理它收到的消息.它應該附加到特定隊列嗎?它應該附加到許多隊列嗎?或者它應該被丟棄.這個規則由交換機的類型定義 .

原文:https://blog.csdn.net/vbirdbest/article/details/78577043


分享到:


相關文章: