1. 程式人生 > 其它 >訊息佇列 MQ

訊息佇列 MQ

一、什麼是MQ

二、RabbitMQ訊息佇列

  1. 概念

    • channel:操作MQ的工具
    • exchange:路由訊息到佇列中
    • queue:快取訊息
    • virtual host:虛擬主機,是對exchange、queue等資源的邏輯分組
  2. SpringAMQP

    <!--AMQP依賴,包含RabbitMQ-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    1. Basic Queue 簡單佇列模型
    2. Work Queue 工作佇列模型

      當訊息處理比較耗時的時候,可能生產訊息的速度會遠遠大於訊息的消費速度。長此以往,訊息就會堆積越來越多,無法及時處理。此時就可以使用 work 模型,多個消費者共同處理訊息處理,速度就能大大提高了。
    3. 釋出、訂閱模型-Fanout

      在廣播模式下,訊息傳送流程是這樣的:
      • 可以有多個佇列
      • 每個佇列都要繫結到 Exchange(交換機)
      • 生產者傳送的訊息,只能傳送到交換機,交換機來決定要發給哪個佇列,生產者無法決定
      • 交換機把訊息傳送給繫結過的所有佇列
      • 訂閱佇列的消費者都能拿到訊息
    4. 釋出、訂閱模型-Direct

      在 Direct 模型下:

      • 佇列與交換機的繫結,不能是任意綁定了,而是要指定一個RoutingKey(路由key)
      • 訊息的傳送方向 Exchange傳送訊息時,也必須指定訊息的 RoutingKey
      • Exchange 不再把訊息交給每一個繫結的佇列,而是根據訊息的Routing Key進行判斷,只有佇列的Routingkey 與訊息的 Routing key完全一致,才會接收到訊息
    5. 釋出、訂閱模型-Topic

       

      Topic 與 Direct相比,都是可以根據RoutingKey把訊息路由到不同的佇列。只不過Topic 型別可以讓佇列在繫結Routing key 的時候使用萬用字元

      • queue1:繫結的是 china.#
         
        ,因此凡是以 china. 開頭的 routing key 都會被匹配到。包括 china.news 和 china.weather
      • queue2:繫結的是 #.news ,因此凡是以 .news 結尾的 routing key 都會被匹配。包括 china.news 和 japan.news