ActiveMQ(为什么要使用消息中间件,JMS传输模型)
為什么要使用消息中間件:
?? 同步請求:當客戶端向服務器發送一條請求的時候,此時服務器由于網絡,或者處理一些比較大的數據的時候,可能有延遲,客戶端 會處于一直等待的狀態。只有等待服務器返回處理結果,或者請求超時,客戶端才能繼續執行
?
因此可以看出同步請求一些場景上面使用有些弊端:客戶與服務器對象的生命周期緊密耦合,客戶進程和服務對象進程都都必須正常運行;如果由于服務對象崩潰或者網絡故障導致用戶的請求不可達,客戶會受到異常
? 在實際項目中有項目 A 它產生了 一系列的數據,需要將該數據存放到數據庫,但是如果由A 項目 直接 存放到數據庫,可能導致A項目執行變慢,所以想將A 項目產生的數據,交由 B 項目? 然后由B 項目提交到數據庫,B 提交數據庫的時候,不管B 執行的時間或者成功失敗,不影響A 的運行
實現這種情況,可以使用消息中間件。
什么是消息中間件:
消息中間件利用高效可靠的消息傳遞機制進行平臺無關的數據交流,并基于數據通信來進行分布式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環境下擴展進程間的通信。例如:A項目將數據發送給消息服務器,消息服務器將消息存放到隊列之中,在合適的時候,消息服務器將消息發送給B 項目
這種模式下,發送和接收是異步的,發送者無需等待;?二者的生命周期未必相同:?發送消息的時候接收者不一定運行,接收消息的時候發送者也不一定運行;
?
什么是JMS
?既然學習消息中間件,用的又是java,所以有必要知道JMS 是什么:JMS即Java消息服務(Java Message Service)應用程序接口,是一個Java平臺中關于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。可以理解成:JMS是java的消息服務,JMS的客戶端之間可以通過JMS服務進行異步的消息傳輸
JMS可以看成一種技術規范,接口
JMS支持兩種消息模型:
點對點消息模型:
消息隊列:存放消息(可以看成是一個地址)
生產者:產生消息的一端
消費者:接受消息的一端
生產者將消息發送到隊列,消費者從隊列中獲取消息消費
?
?點對點的特點:
1.生產者生產的消息只能被一個消費者消費,消費成功以后,則將該消息從隊列中清除
2.生產者和消費者在時間上面沒有什么關聯,生產者生產消息的時候,消費者 可以不再,消費者消費消息的時候,不需要關注生產者是否存在
3.接收者在成功接收消息之后需向隊列應答成功
發布訂閱消息模型:
主題
發布者
訂閱者
發布者將消息發布到主題中,訂閱者訂閱主題(可以有多個訂閱者)
?
發布訂閱特點:
1.每個消息可以有多個消費者
2.發布者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創建一個訂閱者之后,才能消費發布者的消息,而且為了消費消息,訂閱者必須保持運行的狀態。為了緩和這樣嚴格的時間相關性,JMS允許訂閱者創建一個可持久化的訂閱。這樣,即使訂閱者沒有被激活(運行),它也能接收到發布者的消息。
?
?
如何理解 點對點 和點對消費時候的時間關聯性:
點對點消息模型:生產者 生產消息存放到隊列以后,如果消費者者此時 沒有開啟,運行。則消息不會被消費,會保存到隊列之中,消費者 開啟運行以后,則會從隊列中拉取消息進行消費,正常情況,這條消息是保證會被消費者消費。
發對訂閱:發布者發布消息的時候,訂閱者 訂閱了主題,還必須保證在運行,如果沒有開啟運行,則不會消費到這條消息,即使開啟運行以后,也沒法在消費該消息了。
?
如何選擇JMS 哪種消息模型 進行傳輸消息:
如果你希望發送的每個消息都應該被成功處理的話,那么你需要點對點模式。
如果你希望發送的消息可以不被做任何處理、或者被一個消息者處理、或者可以被多個消費者處理的話,那么可以采用發布/訂閱模型
?
在JMS中,消息的產生和消息是異步的。對于消費來說,JMS的消息者可以通過兩種方式來消費消息。?
?同步消費:
訂閱者或接收者調用receive方法來接收消息,receive方法在能夠接收到消息之前(或超時之前)將一直阻塞?
異步 消費:
訂閱者或接收者可以注冊為一個消息監聽器。當消息到達之后,系統自動調用監聽器的onMessage方法。
?
消息中間件使用場景:
用戶注冊賬號 服務器將數據存入數據庫,然后在給用戶發送短信或者郵件
設想 可以使用多線程技術:在創建一個線程來負責發送注冊郵件,但是 如果發送失敗 則沒有后續的補償機制。
此時可以考慮使用 消息中間件
從這樣來看,使用消息中間件 可以降低響應的時間。
?
所以 學習 消息中間件是當前需要掌握的一種技能,消息中間件有很多產品 例如:RabbitMQ,Redis,ActiveMQ,Kafka/Jafka,學習一兩種 傍身,講述ActiveMQ的使用
?
轉載于:https://www.cnblogs.com/920913cheng/p/10594323.html
總結
以上是生活随笔為你收集整理的ActiveMQ(为什么要使用消息中间件,JMS传输模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程--第三周学习进度
- 下一篇: 模块--random