# 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: `額外工具`