消息即爲數據(data),數據有必定的規則、長度、大小。java
Java Message Service(Java消息服務)簡稱JMS,爲Java 程序提供一種通用的方式,來建立、發送、接收以及讀取企業消息系統的消息。數據庫
標準JMS(JSR914):https://www.jcp.org/en/jsr/detail?id=914 apache
JMS 元素:服務器
一、Provider提供方:服務提供者網絡
二、Producer生產者:建立和發送JMS消息的客戶端架構
三、Consumer消費者:接收JMS消息的客戶端異步
四、Client客戶端:生產或消費消息的應用&進程分佈式
五、Message消息:服務端與客戶端之間的傳輸數據對象ide
六、Queue隊列 :包含待讀取消息的準備區域(點對點)性能
七、Topic主題:發佈消息的分佈機制(發佈&訂閱)
JMS提供五種消息主體:
一、BytesMessage(字節)
二、StreamMessage(流)
三、TextMessage(文本、字符串)
四、MapMessage(屬性集合)
五、ObjectMessage(對象)
中間件是一種獨立的系統軟件或服務程序,分佈式應用軟件藉助這種軟件在不一樣的技術之間共享資源。中間件位於客戶機/ 服務器的操做系統之上,管理計算機資源和網絡通信,爲咱們提供發送消息的程序或者服務。
主流消息中間件有:
一、ActiveMq(嚴格jms jsr914)
二、RabbitMq
三、RocketMq
四、Kafka
.....等多種不常是在開發中使用的消息中間件。
最重要的帶來異步以及系統之間的解耦。
未使用MQ的系統之間調用狀況圖:
使用MQ的系統之間調用狀況圖:帶來了異步(提升訂單系統的性能),系統進行了解耦
由國內阿里開源 java語言寫的。貢獻給apache ,做爲apache 的維護開發。簡稱Rmq並無嚴格遵循jms規範(參考)。自己電商背景有關。
RcoketMQ 是一款低延遲、高可靠、可伸縮、易於使用的消息中間件,由java進行開發。
一、穩定無單點故障 不會由於某臺機器或者某個節點宕機而影響系統正常使用
二、 集羣功能完善
三、經歷過雙十一
四、Java語言實現
五、架構輕、源碼可讀性好
七、生態圈完善,配套好
八、開源社區活躍
消息生產者,生產者的做用就是將消息發送到 MQ,生產者自己既能夠產生消息,如讀取文本信息等。也能夠對外提供接口,由外部應用來調用接口,再由生產者將收到的消息發送到 MQ。
生產者組,簡單來講就是多個發送同一類消息的生產者稱之爲一個生產者組。在這裏能夠不用關心,只要知道有這麼一個概念便可。
消息消費者,簡單來講,消費 MQ 上的消息的應用程序就是消費者,至於消息是否進行邏輯處理,仍是直接存儲到數據庫等取決於業務須要。
消費者組,和生產者相似,消費同一類消息的多個 consumer 實例組成一個消費者組。
Topic 是一種消息的邏輯分類,好比說你有訂單類的消息,也有庫存類的消息,那麼就須要進行分類,一個是訂單 Topic 存放訂單相關的消息,一個是庫存 Topic 存儲庫存相關的消息。
Message 是消息的載體。一個 Message 必須指定 topic,至關於寄信的地址。Message 還有一個可選的 tag 設置,以便消費端能夠基於 tag 進行過濾消息。也能夠添加額外的鍵值對,例如你須要一個業務 key 來查找 broker 上的消息,方便在開發過程當中診斷問題。
標籤能夠被認爲是對 Topic 進一步細化。通常在相同業務模塊中經過引入標籤來標記不一樣用途的消息。
Broker 是 RocketMQ 系統的主要角色,其實就是前面一直說的 MQ。Broker 接收來自生產者的消息,儲存以及爲消費者拉取消息的請求作好準備。
Name Server 爲 producer 和 consumer 提供路由信息。
http://rocketmq.apache.org/docs/simple-example