Spring Boot 與訊息
阿新 • • 發佈:2020-12-02
Spring Boot 與訊息
一、概述
- 兩個重要概念:訊息代理和目的地,當訊息傳送者傳送訊息以後,將由訊息代理接管,訊息代理保證訊息傳遞到指定目的地。
- 訊息佇列主要有兩種形式的目的地
- 佇列(queue):點對點訊息通訊
- 主題(topic):釋出、訂閱訊息通訊
- 點對點式:
- 訊息傳送者傳送訊息,訊息代理將其放入佇列中,訊息接受者從佇列中獲取訊息內容,訊息讀取後被移出佇列
- 訊息只有唯一的傳送者和接收者,但並不是說只能有一個接收者
- 釋出訂閱式:
- 傳送者(釋出者)傳送訊息到主題,多個接收者(訂閱者)監聽(訂閱)這個主題,那麼就會在訊息到達時同時收到訊息
- JMS
- 基於 JVM 訊息代理規範。ActiveMQ、HornetMQ是JMS實現
- AMQP(Advanced Message Queuing Protocol)
- 高階訊息佇列協議,也是一個訊息代理的規範,相容JMS
- RabbitMQ 是 AMQP 的實現
- Spring 支援
- Spring Boot 自動配置
- JmsAutoConfiguration
- RebbitAutoConfiguration
二、RabbitMQ
1、核心概念
-
Message
訊息,訊息是不具名的,它由訊息頭和訊息體組成。訊息體是不透明的,而訊息頭則由一系列的可選屬性組成,這些屬性包括 routing-key(路由鍵)、priority(相對於其他訊息的優先權)、delivery-mode (指出該訊息可能需要永續性儲存)等。
-
Publisher
訊息的生產者,也是一個向交換機發布訊息的客戶端應用程式。
-
Exchange
交換器,用來接收生產者傳送的訊息並將這些訊息路由給伺服器中的佇列。
Exchange 有四種類型:direct(預設),fanout,topic,和headers,不同型別的Exchange轉發訊息的策略有所區別。
-
Queue
訊息佇列,儲存訊息,閱後即焚。
-
Binding
訊息佇列和交換器之間的繫結。
-
Connection
網路連線,比如一個TCP連線
-
Channel
通道,多路複用,節省系統開銷。
-
Consumer
訊息的消費者
-
Virtual Host
虛擬主機,表示一批交換器,訊息佇列和相關物件。
-
Broker
訊息佇列伺服器實體
2、RabbitMQ 執行機制
生產者把訊息釋出到 Exchange 上,訊息最終到達佇列並被消費者接收,而 Binding 決定交換器的訊息應該傳送到那個佇列。
Exchange 型別
direct、fanout、topic、headers,其中 headers 不常用。
Direct Exchange
Fanout Exchange
Topic Exchange
3、從 docker 中啟動 RabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq "dockerId"