Message Queue[一] Mq基礎
wordsCount: 494
readingTime: 1 min
viewers:
MessageQueue(MQ)
訊息貯列,協助訊息以非同步方式溝通,常見協議MQTT,AMQP
訊息代理人
經紀人Broker
訊息發送者
生產者Producer
訊息接收者
消費者Consumer
常見的直接溝通,轉換為間接溝通
發送後就等待請求,必須等待請求者接收訊息並處理才回覆,在Mq加入後,解耦合了發送者與接收者
所以 Mq常被稱為代理人Broker,而發送者也不再面對接收者,轉為訊息的Producer,接收者轉為訊息的Consumer
優勢
- 生產者不用等待消費者處理完成,非同步,如果是網站後端,可以將長時間任務解耦合出去,提早給網站使用者回覆
- 原本一對一的溝通,可以因為加入Mq,採用Topic的方式,一次對多個Consumer溝通
- 在符合MQTT的Mq中,通常訊息比HTTP協議夾帶更小量資訊,在IOT領域,節省很多資源
- 在符合AMQP的Mq中,加入exchange角色,讓訊息發布方式可以更複雜,訊息可以暫存
缺點
- 在多個微服務裡面,一件完整的業務,被用Mq解耦合後,如果中途失敗,要如何保持整件事情的交易完整性,是需要思考的
- 在系統未到需要Mq的情況下,提前引入Mq當代理,反而提升了整體複雜度
- 在系統的穩定度上,多了一個不確定的因素
Table of Contents
Related Posts
Message Queue[二] RabbitMq & Pika Pika
緣由 在工作上,因為需要導入發布訂閱模式,故在幾種常見的Mq中做選擇 發布/訂閱 速度 訊息保證 訊息大小 訊息
2023-11-18
Message Queue[三] Kafka
緣由 因為工作學了rabbitMQ,所以閒暇之餘來學kafka,想知道兩者的差異 比較 速度 訊息保證 訊息大
2024-11-23
Task queue[三] Celery(二)
任務定義 將裝飾器綁到函數 celery = Celery(__name__,broker=broker) @celery.task def add(x: int, y: int) -> int: time.sleep(5) return x + y add 就是一個task 任務使用 完整版 apply_async(args[, kwargs[, …]])
2024-1-27
Task queue[二] Celery
緣由 在工作上,遇到單機已經過多負荷,所以開始做實作分散式爬蟲 Celery定義 分散式任務隊列處理 架構 任
2024-1-27
Task queue[一] Tq基礎
TaskQueue & MessageQueue 傳送物件 抽象層級 主要設定 相同 Tq 任務 高(基於mq的封裝) 任務的使用方式與處理 異步與分散式 Mq 訊息 低
2024-1-26
Sponsor
Wechat
Alipay