# RabbitMQ

## 介紹
五大類
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/

### 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

### Publish/Subscribe
透過 Exchange: fanout 特性,達到訂閱 Queue 的 Consumer 都可以收到訊息

### Routing
透過 Exchange: direct 特性,達到 filter 到不同 Queue 的 routing 訊息Routing 模式之所以有它存在的意義,重點就在於他可以 多重綁定,也就是說同一個 routing key 可以綁到 n 個 Queue 上,而不是一對一的綁定

### Topics
透過 Exchange: topic 特性,每個 Queue 都有屬於自己的分類
用法基本上跟 Routing 模式一樣,只是 routing key 進化成可以使用模糊綁定而已

### RPC
透過 AMQP 的協議所定義的 properties 來達成 RPC 的支援

## docker
image 要有manager 才有GUI
第二 export 要有兩個manager and rabbitmq

### 連線

amqp協議 加上帳密最後url
###### tags: `額外工具`