1. 程式人生 > >訊息佇列RabbitMq的五種形式佇列

訊息佇列RabbitMq的五種形式佇列

MQ全稱為Message Queue,訊息佇列是系統之間的通訊方法;

RabbitMQ是開源的,實現了AMQP協議的,採用Erlang(面向併發程式語言)編寫的,可複用的企業級訊息系統;

AMQP(高階訊息佇列協議)是一個非同步訊息傳遞所使用應用層協議規範,為面向訊息中介軟體設計,基於此協議的客戶端與訊息中介軟體可以無視訊息來源傳遞訊息,不受客戶端、訊息中介軟體、不同的開發語言環境等條件的限制;

  •  涉及概念解釋: 
  •  Server(Broker):接收客戶端連線,實現AMQP協議的訊息佇列和路由功能的程序;
  •  Virtual Host:虛擬主機的概念,類似許可權控制組,一個Virtual Host裡可以有多個Exchange和Queue。   
  •  Exchange:交換機,接收生產者傳送的訊息,並根據Routing Key將訊息路由到伺服器中的佇列Queue。
  •  ExchangeType:交換機型別決定了路由訊息行為,RabbitMQ中有三種類型Exchange,分別是fanout、direct、topic;
  •  Message Queue:訊息佇列,用於儲存還未被消費者消費的訊息;
  •  Message:由Header和body組成,Header是由生產者新增的各種屬性的集合,包括Message是否被持久化、優先順序是多少、由哪個Message Queue接收等;body是真正需要傳送的資料內容;
  • BindingKey:繫結關鍵字,將一個特定的Exchange和一個特定的Queue繫結起來。

1.點對點的佇列

  功能:一個生產者P傳送訊息到佇列Q,一個消費者C接收

 

生產者實現思路:

建立連線工廠ConnectionFactory,設定服務地址127.0.0.1,埠號5672,設定使用者名稱、密碼、virtual host,從連線工廠中獲取連線connection,使用連線建立通道channel,使用通道channel建立佇列queue,使用通道channel向佇列中傳送訊息,關閉通道和連線。

消費者實現思路

建立連線工廠ConnectionFactory,設定服務地址127.0.0.1,埠號5672,設定使用者名稱、密碼、virtual host,從連線工廠中獲取連線connection,使用連線建立通道channel,使用通道channel建立佇列queue, 建立消費者並監聽佇列,從佇列中讀取訊息。

2 工作佇列模式Work Queue

      功能描述:一個生產者傳送訊息到佇列中,有多個消費者共享一個佇列,每個消費者獲取的訊息是唯一的。 為了保證伺服器同一時刻只發送一條訊息給消費者,保證資源的合理利用。channal.basicQos(1);這樣是為了保證多個消費者接收的訊息數量不一樣,能者多勞,如果不設定,那麼消費者是平均分配訊息(例如10條訊息,每個消費者接收5條)

3 釋出/訂閱模式Publish/Subscribe


這個可能是訊息佇列中最重要的隊列了,其他的都是在它的基礎上進行了擴充套件。

功能實現:一個生產者傳送訊息,多個消費者獲取訊息(同樣的訊息),包括一個生產者,一個交換機,多個佇列,多個消費者。

 思路解讀(重點理解): 

(1)一個生產者,多個消費者

(2)每一個消費者都有自己的一個佇列

(3)生產者沒有直接發訊息到佇列中,而是傳送到交換機

(4)每個消費者的佇列都繫結到交換機上

(5)訊息通過交換機到達每個消費者的佇列

注意:交換機沒有儲存訊息功能,如果訊息傳送到沒有繫結消費佇列的交換機,訊息則丟失。

4 路由模式Routing


功能:生產者傳送訊息到交換機並指定一個路由key,消費者佇列繫結到交換機時要制定路由key(key匹配就能接受訊息,key不匹配就不能接受訊息),例如:我們可以把路由key設定為insert ,那麼消費者佇列key指定包含insert才可以接收訊息,消費者佇列key定義為update或者delete就不能接收訊息。很好的控制了更新,插入和刪除的操作。

5 萬用字元模式Topics


說明:此模式實在路由key模式的基礎上,使用了萬用字元來管理消費者接收訊息。生產者P傳送訊息到交換機X,type=topic,交換機根據繫結佇列的routing key的值進行萬用字元匹配;

符號#:匹配一個或者多個詞lazy.# 可以匹配lazy.irs或者lazy.irs.cor

符號*:只能匹配一個詞lazy.* 可以匹配lazy.irs或者lazy.cor

6.spring整合rabbitmq配置

提供了AMQP的一個實現,並且spring-rabbit是RabbitMQ的一個實現,下面給出訂閱者模式的事例配置如下:

7.總結

RabbitMQ提供了6種模式,分別是HelloWorld,Work Queue,Publish/Subscribe,Routing,Topics,RPC Request/reply,本文詳細講述了前5種,並給出程式碼實現和思路。其中Publish/Subscribe,Routing,Topics三種模式可以統一歸為Exchange模式,只是建立時交換機的型別不一樣,分別是fanout、direct、topic。Spring提供了rabbitmq的一個實現,所以整合起來很方便,文章第4章給出了訂閱者模式的一種spring配置。