RabbitMQ (一) 簡介

RabbitMQ的優點

基於ErLang語言開發具有高可用高併發的優點, 適合集羣服務器

健壯, 穩定, 跨平臺, 支持多種語言, 文檔齊全

有消息確認機制和持久化機制, 可靠性高

RabbitMQ的概念

生產者和消費者

Product: 消息的生產者

Consumer: 消息的消費者

Queue

消息隊列, 提供了FIFO的處理機制, 具有緩存消息的能力. RabbitMQ中, 隊列消息可以設置爲持久化, 臨時或者自動刪除

設置爲持久化的機制, Queue中的消息會在Server本地硬盤存儲一份, 防止系統Crash, 數據丟失

設置爲臨時隊列, Queue中的數據在系統重啓之後就會丟失

設置爲自動刪除的隊列, 當不存在用戶連接到Server, 隊列中的數據會被自動刪除

Exchange

Exchange類似於數據通信網絡中的交換機, 提供消息路由策略。RabbitMQ中, Producer不是通過信道直接將消息發送給Queue, 而是先發送給Exchange. 一個Exchange可以和多個Queue進行綁定, Producer在傳遞消息的時候, 會傳遞一個ROUTING_KEY, Exchange會根據這個ROUTING_KEY按照特定的路由算法, 將消息路由給指定的Queue. 和Queue一樣, Exchange也可以設置爲持久化, 臨時或者自動刪除

Exchange的4中類型

direct(默認): 直接交換器, 工作方式類似於單播。Exchange會將消息完全匹配ROUTING_KEY的Queue(key就等於queue)

fanout: 廣播是式交換器, 不管消息的ROUTING_KEY設置爲什麼, Exchange都會將消息轉發給所有綁定的Queue, 給所有的queue都來一份)

topic: 主題交換器, 工作方式類似於組播, Exchange會將消息轉發和ROUTING_KEY匹配模式相同的所有隊列。比如: ROUTING_KEY爲user.stock的Message會轉發給綁定匹配模式爲*.stock.user.stock, *.*和#.user.stock.#的隊列

headers: 消息體的header匹配, 無視key, 通過查看消息的頭部元素數據來決定分發給哪個queue(AMQP頭部元數據非常豐富而且可以自定義)

Binding

所謂綁定就是將一個特定的Exchange和一個特定的Queue綁定起來。Exchange和Queue的綁定可以是多對多的關係

Virtual Host

在RabbitMQ Server上可以創建多個虛擬的Message Broker, 又叫做Virtual Host(vhosts)。每一個vhost本質上是一個mini-rabbitmq server, 分別管理各自的Exchange, 和bindings. vhost相當於物理的server, 可以爲不同app提供邊界隔離, 使得應用安全的運行在不同的vhost實例上, 相互之間不會干擾。Producer和Consumer連接rabbit server需要制定一個vhost

 

MQ消息投遞模型

RabbitMQ的使用過程

客戶端連接到消息隊列服務器, 打開一個Channel

客戶端聲明一個Exchange, 並設置相關屬性

客戶端聲明一個Queue, 並設置相關屬性

客戶端使用Routing Key, 在Exchange和Queue之間建立好綁定關係

客戶端投遞消息到Exchange

Exchange接收到消息後, 就根據消息的key和已經設置的binding, 進行消息路由, 將消息投遞到一個或多個隊列裏。

 

RabbitMQ-安裝

基於Docker來安裝RabbitMQ

docker-compose.yml

version: ‘3.1’
services: 
  rabbitmq:
restart: always
image: rabbitmq:management
container_name: rabbitmq
ports:
  - 5672:5672
  - 15672: 15672
environment:
  TZ: Asia/Shanghai
  RABBITMQ_DEFAULT_USER: rabbit
  RABBITMQ_DEFAULT_PASS: 123456
volumes:
  - ./data:/var/lib/rabbitmq

RabbitMQ WebUI

訪問地址

http://ip:15672

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章