消息中間件哪些事

閱讀文本大概需要3分鐘。

一、消息中間件的產生的背景

1.在網絡通訊中,Http請求默認採用同步請求方式,基於請求與響應模式

2.在客戶端與服務器進行通訊時,客戶端調用服務端接口後,必須等待服務端完成處理後返回結果給客戶端才能繼續執行,這種情況屬於同步調用方式。

3.如果服務器端發生網絡延遲、不可達的情況,可能客戶端也會受到影響。

二、什麼是消息中間件

消息隊列中間件是分佈式系統中重要的組件,主要解決應用解耦,異步消息,流量削鋒等問題,實現高性能,高可用,可伸縮和最終一致性架構。

目前使用較多的消息隊列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

實現方式:面向消息的中間件(MessageOrlented MiddlewareMOM)較好的解決了以上問題。發送者將消息發送給消息服務器,消息服務器將消息存放在若千隊列中,

在合適的時候再將消息轉發給接收者。這種模式下,發送和接收是異步的,發送者無需等待; 二者的生命週期未必相同: 發送消息的時候接收者不一定運行,

接收消息的時候發送者也不一定運行;一對多通信: 對於一個消息可以有多個接收者。

原理圖

三、JMS介紹

1、什麼是JMS

JMS是java的消息服務器,JMS的客戶端之間可以通過JMS服務進行異步的消息傳輸,是一個Java平臺中面向消息中間件的API

角色劃分

   1.提供者:實現JMS規範的消息中間件服務器 (存放消息容器)

  2.客戶端:發送或接收消息的應用程序

  3.生產者/發佈者:創建併發送消息的客戶端(向消息容器存放消息)

  4.消費者/訂閱者:接收並處理消息的客戶端

  5.消息:應用程序之間傳遞的數據內容

  6.消息模式:在客戶端之間傳遞消息的方式,JMS中定義了主題和隊列兩種模式 點對點與發佈訂閱模式。

2、什麼是消息模型

  • Point-to-Point(P2P) --- 點對點(生產者發送一條消息到queue,只有一個消費者能收到)

  • Publish/Subscribe(Pub/Sub)---  發佈訂閱(發佈者發送到topic的消息,只有訂閱了topic的訂閱者纔會收到消息)

     即點對點和發佈訂閱模型

    P2P(點對點)

  • p2p模型圖

  • 相關概念

  1. 消息隊列(Queue)

  2. 發送者(Sender)

  3. 接收者(Receiver)

  4. 每個消息都被髮送到一個特定的隊列,接收者從隊列中獲取消息。隊列保留着消息,直到他們被消費或超時。

  • p2p特點

  1. 每個消息只有一個消費者(Consumer)(即一旦被消費,消息就不再在消息隊列中)

  2. 發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息之後,不管接收者有沒有正在運行,它不會影響到消息被髮送到隊列

  3. 接收者在成功接收消息之後需向隊列應答成功,如果你希望發送的每個消息都應該被成功處理的話,那麼你需要P2P模式。

  • 應用場景

     A用戶與B用戶發送消息

     Pub/Sub (發佈與訂閱)        

  • Pub/Sub模式圖

 

  • 相關概念

    1.主題(Topic)

    2.發佈者(Publisher)

    3.訂閱者(Subscriber) 
    4.客戶端將消息發送到主題。多個發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。

  • Pub/Sub的特點 

 每個消息可以有多個消費者

       發佈者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創建一個訂閱者之後,才能消費發佈者的消息,而且爲了消費消息,訂閱者必須保持運行的狀態。

      爲了緩和這樣嚴格的時間相關性,JMS允許訂閱者創建一個可持久化的訂閱。這樣,即使訂閱者沒有被激活(運行),它也能接收到發佈者的消息。  如果你希望發送的消息可以不被做任何處理、

       或者被一個消息者處理、或者可以被多個消費者處理的話,那麼可以採用Pub/Sub模型

消息的消費 
           在JMS中,消息的產生和消息是異步的。對於消費來說,JMS的消息者可以通過兩種方式來消費消息。 
 同步 
        訂閱者或接收者調用receive方法來接收消息,receive方法在能夠接收到消息之前(或超時之前)將一直阻塞 
○ 異步 
       訂閱者或接收者可以註冊爲一個消息監聽器。當消息到達之後,系統自動調用監聽器的onMessage方法。

  •  發佈訂閱與點對點通訊方式區別:

     點對點 只能保證一個消費者進行消費 一對一 發佈訂閱 只要集羣服務訂閱該主題都會受收到消息 一對多

source:https://www.cnblogs.com/cxyyh/p/10700437.html

往期精彩

01 漫談發版哪些事,好課程推薦

02 Linux的常用最危險的命令

03 互聯網支付系統整體架構詳解

04 優秀的Java程序員必須瞭解的GC哪些

05 IT大企業有哪些病,別被這些病毀了自己?

關注我每天進步一點點

你點的在看,我都當成了喜歡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章