1. 程式人生 > 實用技巧 >Spring Boot 與訊息

Spring Boot 與訊息

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"