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