1. 程式人生 > >訊息中介軟體之 RocketMQ

訊息中介軟體之 RocketMQ

參考文件:
http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/
http://rocketmq.apache.org/docs/quick-start/
https://www.jianshu.com/p/824066d70da8
https://www.jianshu.com/p/453c6e7ff81c
https://www.infoq.cn/article/l*fg5StAPoKiQULat0SH

寫在最前:

MQ(訊息佇列)是用於諸如非同步實現、異構系統通訊等常見的技術方案之一。

在日常技術方案中,從測試工程師的視角出發,主要需要知道以下幾點:

  1. MQ本身不具備冪等性。
    在實際業務中,因為網路異常,很容易導致訊息重發,又或者可能因為MQ宕機重啟後,重複消費等。所以往往基於業務所需,當有寫操作時,消費者服務的設計者需要自行保證業務的冪等。
  2. 在分散式服務中,需要考慮MQ訊息是否能使事務達成最終一致性;如果MQ宕機或網路等問題導致訊息無法被消費,是否需要增加補償機制。
  3. MQ的日誌檢視。

關於MQ

MQ即Message Queue的意思。其是非同步通訊系統,是分散式架構的常用解決方案之一。
在當下主流MQ中,主要包括了 Kafka (這不僅僅是訊息中介軟體),RocketMQ,RabbitMQ等。在Java技術棧領域中,基本都是選用RocketMQ作為訊息中介軟體。

RocketMQ架構

RocketMQ 主要包括了: NameServer 、Broker 、Producer 和 Consumer

  • NameServer: 提供輕量級的服務發現和路由。 每個 NameServer 記錄完整的路由資訊,提供等效的讀寫服務,並支援快速儲存擴充套件。

  • Broker: 通過提供輕量級的 Topic 和 Queue 機制來處理訊息儲存,同時支援推(push)和拉(pull)模式以及主從結構的容錯機制。

  • Producer:生產者,產生訊息的例項,擁有相同 Producer Group 的 Producer 組成一個叢集。

  • Consumer:消費者,接收訊息進行消費的例項,擁有相同 Consumer Group 的
    Consumer 組成一個叢集。