---
# System prepended metadata

title: RabbitMQ
tags: [額外工具]

---

# RabbitMQ 
![](https://i.imgur.com/Ulz2QKq.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://kucw.github.io/blog/2020/11/rabbitmq/
![](https://i.imgur.com/jiZPbb0.png)

### Producer
負責丟訊息到 Queue 中

若有定義 Exchange，則丟給 Exchange 決定要給誰

### Consumer
負責接收來自 Queue 的訊息

### Queue
負責存放所需要的資料

跟資料結構的 Queue 一樣，有先進先出 (FIFO) 特性

每個 Queue 都會有他的名字當 id

### Exchange
用來決定 Producer 給的資料要丟給哪一個 Queue

主要有這四種方式

* direct: 直接丟給指定的 Queue

* topic: 類似 regular expression，設定 binding 規則，丟給符合的 Queue

* headers: 透過傳送資料的 header 來特別指定所要的 Queue

* fanout: 一次丟給全部負責的 Queue
### Binding
跟 Exchange 成對搭配，主要是告訴 Exchange 他負責哪些 Queue

##  RabbitMQ 這些特性可以什麼事？

### Task queues
不透過任何的 Exchange 直接送到指定的 Queue
![](https://i.imgur.com/MNGLp21.png)

### Publish/Subscribe
透過 Exchange: fanout 特性，達到訂閱 Queue 的 Consumer 都可以收到訊息
![](https://i.imgur.com/DPirxbu.png)

### Routing
透過 Exchange: direct 特性，達到 filter 到不同 Queue 的 routing 訊息Routing 模式之所以有它存在的意義，重點就在於他可以 多重綁定，也就是說同一個 routing key 可以綁到 n 個 Queue 上，而不是一對一的綁定
![](https://i.imgur.com/HooM2zZ.png)
### Topics
透過 Exchange: topic 特性，每個 Queue 都有屬於自己的分類
用法基本上跟 Routing 模式一樣，只是 routing key 進化成可以使用模糊綁定而已
![](https://i.imgur.com/t5UIizh.png)
### RPC
透過 AMQP 的協議所定義的 properties 來達成 RPC 的支援
![](https://i.imgur.com/Kh6Iyoo.png)

## docker
image 要有manager 才有GUI
第二 export 要有兩個manager and rabbitmq
![](https://i.imgur.com/33XtvgF.png)

### 連線
![](https://i.imgur.com/NVcn1Og.png)
amqp協議 加上帳密最後url

###### tags: `額外工具`