# Message Queue ## What is Message Queue ? Message Queue 本質就是一個 Queue 而 Queue 的內容存放的是 message 主要用途為不同 Pocess, Thread 或 Service 之間的溝通 ## Why Message Queue ? Message Queue 有以下優點: 1. Better Performance: * MQ 可以很容易的達到各個 Service 之間的**非同步**溝通( HTTP 為同步溝通 ) * 在一些 Latency 不重要的情況下,client 只需要跟等待 web server 將資料丟進 Queue 的時間,不需要等待整個服務結束 2. Decoupling * 可以很容易的去除各個 service 之間的相依性 3. Flexiability of scaling * 由於 service 之間的相依性變低,因此可以很容易的依照需求縮減 4. Reliablity * 當 comsumer 突然故障,MQ 可以將資料暫存起來,等到 consumer 重新上現在傳送過去。 ## Push or Pull Delivery * Comsumer 要知道是否有任務要做主要有兩種方式 * Push: 當 MQ 收到來自 producer 的資料後,主動用類似onMessage接口通知 comsumer * Pull: Consumer輪詢調用MQ的接口來拿新資料 <!-- ## RabbitMQ 介紹 ![](https://i.imgur.com/7bQiLXj.png) 圖片來自:[https://zamhuang.medium.com/rabbitmq-%E4%BA%94%E5%88%86%E9%90%98%E8%BC%95%E9%AC%86%E4%BA%86%E8%A7%A3-rabbitmq-%E9%81%8B%E4%BD%9C-fcaecbaa69d4](https://zamhuang.medium.com/rabbitmq-%E4%BA%94%E5%88%86%E9%90%98%E8%BC%95%E9%AC%86%E4%BA%86%E8%A7%A3-rabbitmq-%E9%81%8B%E4%BD%9C-fcaecbaa69d4) -->