- 問:什麼是RabbitMQ?
- 問:RabbitMQ是如何工作的,它是標準消息流嗎?
- 問:何時以及爲何使用RabbitMQ?
- 問:如何將RabbitMQ與Java集成?
- 問:什麼是綁定和路由密鑰?
- 問:什麼是RabbitMQ頻道?
- 問:rabbitmq中的死信隊列是什麼?
- 問:如何在本地安裝和配置RabbitMQ?
- 問:什麼是交易所?
- 問:交易所類型?
- 問:RabbitMQ使用哪種協議?
- 問:如何將RabbitMQ與Spring Coud Stream集成?
- 問:什麼是RabbitMQ Vhost?
- 問:RabbitMQ與ActiveMQ有何不同?
- 問:RabbitMQ是否支持MQTT(消息隊列遙測傳輸)?
- 問:RabbitMQ是否持久?
- 問:RabbitMQ使用數據庫嗎?
- 問:RabbitMQ是推還是拉?
- 問:Rabbitmq中的死信交換是什麼?
- 問:什麼是pub sub,它是如何工作的?
- 問:RabbitMQ是ESB嗎?
- 問:RabbitMQ使用哪種設計模式。
- 問:如何監視rabbitMQ隊列。
- 問:什麼是同步和異步消息傳遞?
- 問:RabbitMq中正在使用哪些消息傳遞模式?
- 問:什麼是點對點溝通?
- 問:RabbitMQ與Kafka有何不同?
- 問:什麼是Pub Sub Communication?
- 問:什麼是請求-響應通信?
- 問:什麼是Erlang RabbitMQ?
- 問:RabbitMQ是否支持消息優先級隊列?
問:什麼是RabbitMQ?
答:
RabbitMQ也被稱爲消息排隊技術或消息代理。這是一個開源消息代理。簡單地說:它是確定隊列以及連接消息或消息的應用程序的程序。消息中可以提供任何種類的信息。
問:RabbitMQ是如何工作的,它是標準消息流嗎?
答:
交易所必須接受來自供應商請求的消息,並使用標頭屬性,綁定和路由鍵將它們路由到消息隊列。建立綁定以將隊列連接到交換機。如上面的屏幕截圖所示,下面是“標準”消息流。
1)生產者向交易所發佈消息。創建交換時,必須指定交換的類型。稍後將詳細說明不同類型的交換。
2)交換機收到消息,現在負責消息的路由。交換根據交換類型考慮不同的消息屬性,例如路由密鑰。
3)必須從交換到隊列創建綁定。在這種情況下,我們從交換中看到兩個綁定到兩個不同的隊列。Exchange根據郵件屬性將郵件路由到隊列中。
4)消息保留在隊列中,直到由使用者處理爲止。
5)使用者處理消息。
問:何時以及爲何使用RabbitMQ?
答:
當您要交換消息以供消耗或具有多個收件人的工作人員之間的負載平衡時,消息隊列很有用。當生產者在隊列中時,用戶能夠從隊列中獲取消息並開始處理。使用者可以與發佈者位於不同的服務器或同一臺服務器上。所請求的應用程序可以是一種語言,而使用者應用程序可以是另一種語言-消息代理不會關心應用程序語言,它只是在使用者和接收者之間發送消息。這也減少了應用程序之間的依賴關係或耦合。
問:如何將RabbitMQ與Java集成?
答:
問:什麼是綁定和路由密鑰?
答:
綁定是您設置的用於將隊列連接到交換機的“橋”。
路由密鑰是屬性消息,交換機在確定如何將消息路由到隊列時會對其進行檢查。
問:什麼是RabbitMQ頻道?
答:
它們使您可以與RabbiMQ服務器建立單一連接,但是對於應用程序的不同部分,它們具有沙盒通信。 通道是RabbitMQ服務器與應用程序通信的方式。每個客戶端進程擁有一個連接(實例),並且該進程(實例)中擁有多個通道
問:rabbitmq中的死信隊列是什麼?
答:
通常,死亡信隊列(DLQ),也稱爲未傳遞消息隊列,是由於某種原因而無法發送到目的地的消息的保留隊列。
在rabbitmq中,死信隊列是服務實現,用於存儲滿足以下一個或多個以下失敗條件的消息。
- 發送到不存在的隊列的消息。
- 超過隊列長度限制。
- 超出消息長度限制。
- 消息被另一個隊列交換拒絕。
- 消息達到閾值讀取計數器數,因爲它沒有被使用。有時,這稱爲“退出隊列”。
問:如何在本地安裝和配置RabbitMQ?
答:
問:什麼是交易所?
答:
消息不直接發佈在隊列中;用戶將消息發送到交換機。交換機負責將消息路由到各個隊列。交換從生產者請求接收消息,並通過綁定和路由鍵將消息路由到消息隊列。綁定是交換和隊列之間的鏈接。
問:交易所類型?
答:
直接:直接交換根據消息路由密鑰將消息傳輸到隊列。消息通過直接交換路由到綁定鍵與消息的路由鍵完全匹配的隊列。如果將隊列綁定到綁定密鑰交換,則將使用路由到隊列的路由消息向交換髮送。
扇出:扇出將消息發送到與其鏈接的所有隊列。
主題:主題交換將路由密鑰和綁定路由模式之間的通配符匹配。
標頭:標頭交換使用消息標頭的路由屬性。
問:RabbitMQ使用哪種協議?
答:
RabbitMQ使用高級消息隊列協議(AMQP)。它是一個開放的標準層,用於通過字節流在網絡上傳遞日期。
問:如何將RabbitMQ與Spring Coud Stream集成?
答:
帶有Spring Cloud Stream的RabbitMQ
問:什麼是RabbitMQ Vhost?
答:
一個虛擬主機(又名“虛擬主機”)在AMQP是對象,如交易所,隊列和綁定一個命名空間。RabbitMQ通過有效地使虛擬主機成爲代理之上的“虛擬集羣”,從而利用虛擬主機的更具體實現。
問:RabbitMQ與ActiveMQ有何不同?
答:
RabbitMQ是開源消息代理,支持以Erlang編寫的多種協議。而ActiveMQ還是開源的,支持以Java語言編寫的多種協議。
問:RabbitMQ是否支持MQTT(消息隊列遙測傳輸)?
答:
RabbitMQ通過核心發行版附帶的插件支持MQTT 3.1.1。
支持的MQTT功能:
- QoS0和QoS1發佈和使用
- QoS2發佈(降級爲QoS1)
- TLS
- 會話粘性
- 帶有可插拔存儲後端的保留消息
- 遺囑(LWT)
問:RabbitMQ是否持久?
答:
使隊列具有持久性與使持久性消息不同。消息可以通過製作模式分發到持久性或臨時性。發佈消息時,如果希望在重新啓動期間將其保留在持久隊列中,則需要將傳遞模式設置爲持久模式。
問:RabbitMQ使用數據庫嗎?
答:
RabbitMQ有意不將消息存儲在數據庫中。RabbitMQ通過以下兩種方式將消息寫入磁盤:
- 以delivery_mode = 2發佈的郵件
- 內存壓力導致RabbitMQ用完RAM,並將消息傳輸到磁盤以釋放RAM。
問:RabbitMQ是推還是拉?
答:
RabbitMQ使用PUSH模板,並防止通過預取配置的限制耗盡用戶。卡夫卡(Kafka)使用PULL,消費者在其中請求來自特定偏移批次的消息。
問:Rabbitmq中的死信交換是什麼?
答:
如果沒有適當的消息隊列,該消息將被靜默丟棄。RabbitMQ提供了稱爲“死信交換”的AMQP擴展。死信交換提供了用於收集不可傳遞消息的功能。
問:什麼是pub sub,它是如何工作的?
答:
發佈/訂閱消息傳遞是異步的服務到服務通信,它是一種雙向通信。
主要用於狀態,微服務。在這種類型的模型中,一旦消息發佈到某個主題,該主題的所有訂閱者都會立即收到該消息。
問:RabbitMQ是ESB嗎?
答:
RabbitMQ是消息傳遞代理,而Mule是ESB(企業服務總線)。ESB在消息代理之上包括其他層,例如路由,轉換和業務流程管理
問:RabbitMQ使用哪種設計模式。
答:
作爲一種強大的消息傳遞模型,在通信通道中的端點之間傳輸消息具有許多功能/用途。它使用異步體系結構模式來分離應用程序。
問:如何監視rabbitMQ隊列。
答:
監視是使用運行狀況檢查和指標來捕獲應用程序行爲的過程。
有許多工具可用於監視應用程序,例如AppDynamics,DataDog,AWS CloudWatch等。
問:什麼是同步和異步消息傳遞。
答:
同步消息傳遞是一種雙向通信,其中發送方向接收方發送消息,接收方接收消息並向發送方回覆。其中“異步消息傳遞”是一種通信,其中消息放置在消息隊列中,不需要接收者的立即響應。
問:RabbitMq中正在使用哪些消息傳遞模式?
答:
消息傳遞模式是在RabbitMQ中基於交換隊列和綁定實現的。我們可能會區分實現RabbitMQ設計模式的不同方法:點對點通信,發佈,訂閱,請求,響應通信
問:什麼是點對點溝通?
答:
點對點連接是兩個通信端點/節點之間的通信連接。
問:RabbitMQ與Kafka有何不同?
答:
RabbitMQ是用於在消費者和生產者之間傳遞消息的輕量級消息代理,它支持許多協議,例如AMQP,MQTT,STOMP。Kafka只需很少的開銷即可管理大量數據,而Kafka則是爲存儲和分發大量消息而設計的。
問:什麼是Pub Sub Communication?
答:
發佈/訂閱消息傳遞是異步用戶和服務之間的雙向通信,主要用於無狀態微服務中。
問:什麼是請求-響應通信?
答:
請求-響應或請求-答覆是一種強消息傳遞模式,其中請求者將消息發送到答覆者,而返回答覆者將響應發送回答復者。
問:什麼是Erlang RabbitMQ?
答:
RabbitMQ服務器軟件是用Erlang的編程語言編寫的,並且基於Open Telecom Framework的羣集和故障轉移體系結構。
問:RabbitMQ是否支持消息優先級隊列?
答:
要使隊列充當優先級隊列,請 在建立隊列時提供一個屬性。 聲明隊列中的最大優先級數。 在JavAns中:設置以下優先級:x-max-priority
x-max-priority
Map<String, Object> queuePriorityProp = new HashMap<>();
queuePriorityProp.put("x-max-priority", 10); // max priority is 10
channel.queueDeclare(QUEUE_NAME, durable, false, false, queuePriorityProp);
發佈特定優先級的消息,
String queueNote = "Set note priority 8";
AMQP.BasicProperties.Builder queueProps = new AMQP.BasicProperties.Builder();
queueProps.contentType("text/plain")
.priority(8);
channel.basicPublish("", QUEUE_NAME, queueProps.build(), queueNote.getBytes());