NATS_02:NATS消息通信模型


消息通信模型

  NATS的消息通信是這樣的:應用程序的數據被編碼為一條消息,並通過發布者發送出去;訂閱者接收到消息,進行解碼,再處理。訂閱者處理NATS消息可以是同步的或異步的。

  

 * 異步處理 
  異步處理使用回調消息句柄處理消息,當有消息到來時,已注冊的回調句柄接收並控制處理消息。整個過程客戶端不會被阻塞,可以同步執行其它任務。異步處理可以采用多線程調度的設計。 
 * 同步處理 
  同步處理需要應用程序顯示調用方法來處理到來的消息。這種顯示調用是阻塞式的調用,會暫停任務直到消息可用。如果沒有可用的消息,消息處理阻塞的周期由客戶端設置。同步處理通常用於服務器等待並處理傳入的請求消息,並發送響應給客戶端。

NATS支持以下消息通信模型,包括:

1. 發布/訂閱模型

  

  NATS實現了一個發布/訂閱消息通信模型,NATS的發布/訂閱是一對多的消息通信。發布者在一個主題上發送消息,任何注冊(訂閱)了此主題的客戶端都可以接收到該主題的消息。訂閱者可以使用主題通配符注冊感興趣的主題。 
  如果客戶端沒有注冊某個主題(或者客戶端不在線),那么該主題發布消息時,客戶端不會收到該消息。NATS系統是一種“發送后不管”的消息通信系統,故如果需要高級服務,需要在客戶端開發相應的功能。 
  對於異步消息通信,消息交付給訂閱者的消息句柄。如果客戶端沒有句柄,那么該消息通信是同步的,那么客戶端可能會被阻塞,直到它處理了該消息。

  有關發布/訂閱相關詳情,情查看我的另外一篇博客:NATS_03:發布/訂閱機制

2. 請求/響應模型

   

  NATS支持兩種請求-響應消息通信:P2P(點對點)和 O2M(一對多)。P2P 最快、響應也最先。而對於O2M,需要設置請求者可以接收到的響應數量界限。 
  在 請求-響應 的消息交換,發布請求操作會發布一個帶預期響應的消息到Reply主題。 請求創建了一個收件箱,並在收件箱執行調用,並進行響應和返回

3. 隊列模型

   

  NATS支持P2P消息通信的隊列。要創建一個消息隊列,訂閱者需注冊一個隊列名。所有的訂閱者用同一個隊列名,形成一個隊列組。當消息發送到主題后,隊列組會自動選擇一個成員接收消息。盡管隊列組有多個訂閱者,但每條消息只能被組中的一個訂閱者接收。 
  隊列的訂閱者可以是異步的,這意味着消息句柄以回調方式處理交付的消息。異步隊列訂閱者必須建立處理消息的邏輯。

  隊列模型一般常用語數據隊列使用,例如:采集從網頁上采集的數據經過處理直接寫入到該隊列,接收端一方可以起多個線程同時讀取其中的一個隊列,其中某些數據被一個線程消費了,其他線程就看不到了,這種方式為了解決采集量巨大的情況下,后端服務可以動態調整並發數來消費這些數據。說白了就一點,上游生產數據太快,下游消費可能處理不過來,中間進行緩沖,下游就可以根據實際情況進行動態調整達到動態平衡。

NATS的特性

  NATS提供了以下獨特的功能: 
  1)純發布/訂閱 
    永遠不假定有接收者;總是在線 
  2)集群模式的服務器 
    NATS服務器可以集群;發布式的隊列可以跨域集群;集群感知的客戶端 
  3)訂閱者的自動修剪 
    要支持可伸縮性,NATS提供了客戶端連接的自動修剪功能;如果某個客戶端APP處理消息很慢,NATS會自動關閉此客戶端的連接;如果某個客戶端在ping-pong時間間隔內未做響應,服務器會自動關閉此連接;客戶端實現了重連邏輯 
  4)基於文本的協議 
    開發上手比較容易;不影響服務器的性能;可以直接用Telnet連接服務器

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM