訊息佇列 MQ
阿新 • • 發佈:2022-03-18
一、什麼是MQ
二、RabbitMQ訊息佇列
-
概念
- channel:操作MQ的工具
- exchange:路由訊息到佇列中
- queue:快取訊息
- virtual host:虛擬主機,是對exchange、queue等資源的邏輯分組
-
SpringAMQP
<!--AMQP依賴,包含RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
- Basic Queue 簡單佇列模型
- Work Queue 工作佇列模型
當訊息處理比較耗時的時候,可能生產訊息的速度會遠遠大於訊息的消費速度。長此以往,訊息就會堆積越來越多,無法及時處理。此時就可以使用 work 模型,多個消費者共同處理訊息處理,速度就能大大提高了。 - 釋出、訂閱模型-Fanout
在廣播模式下,訊息傳送流程是這樣的:- 可以有多個佇列
- 每個佇列都要繫結到 Exchange(交換機)
- 生產者傳送的訊息,只能傳送到交換機,交換機來決定要發給哪個佇列,生產者無法決定
- 交換機把訊息傳送給繫結過的所有佇列
- 訂閱佇列的消費者都能拿到訊息
- 釋出、訂閱模型-Direct
在 Direct 模型下:
- 佇列與交換機的繫結,不能是任意綁定了,而是要指定一個
RoutingKey
(路由key) - 訊息的傳送方向 Exchange傳送訊息時,也必須指定訊息的
RoutingKey
。 - Exchange 不再把訊息交給每一個繫結的佇列,而是根據訊息的
Routing Key
進行判斷,只有佇列的Routingkey
與訊息的Routing key
完全一致,才會接收到訊息
- 佇列與交換機的繫結,不能是任意綁定了,而是要指定一個
- 釋出、訂閱模型-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
- queue1:繫結的是
- Basic Queue 簡單佇列模型