文章目錄
- 同步調用和異步調用
- MQ
- RabbitMQ
- 1. RabbitMQ控制臺實現交換機路由到隊列
- 1.1 創建隊列
- 1.2 將消息發送給交換機,是否會到達隊列
- 2. RabbitMQ控制臺實現數據隔離
- 2.1 添加一個用戶
- 2.2 創建新的虛擬主機

同步調用和異步調用
同步調用是指完成一個功能,其內部有多個任務,要一直等待這幾個任務全都完成后,才算這個功能的結束。
e.g 比如,在登錄的時候,原本只需要校驗用戶名和密碼,但需求說的是,還需要給用戶發一條短信,或者還需要給用戶加積分之類的。如果是同步的話,那么用戶登錄就不僅僅是校驗用戶名和密碼,還要一直等待成功發送短信或加完積分后,才能進入網頁。
這樣,用戶等待時間較長,性能就比較差。
異步調用是指只完成必要的任務,其余任務交給消息代理,由消息代理去慢慢通知消息處理方處理,用戶就不需要一直等待,把任務通知給消息代理即可。
優點:性能較好,無需等待;緩存消息,流量削峰填谷。
缺點:不能立即調用結果;不確定后序任務時候執行成功;依賴于消息代理的可靠性。
MQ
MQ(MessageQuque):消息隊列,存放消息的一種隊列。
常見:RabbitMQ、RocketMQ、Kafka、ActiveMQ。
RabbitMQ | RocketMQ | Kafka | ActiveMQ | |
---|---|---|---|---|
公司 | Rabbit | 阿里 | Apache | Apache |
開發語言 | Erlang | Java | Scala&Java | Java |
協議支持 | AMQP, XMPP, SMTP, STOMP | 自定義協議 | 自定義協議 | OpenWrite, STOMP, REST, XMPP, AMQP |
可用性 | 高 | 高 | 高 | 一般 |
單機吞吐量(QPS) | 一般 | 高 | 非常高 | 差 |
消息延遲 | 微妙級 | 毫秒級 | 毫秒以內 | 毫秒級 |
消息可靠性 | 高 | 高 | 一般 | 一般 |
RabbitMQ 的延遲性最好(微秒級),Kafka 的吞吐量最高(百萬級別的 QPS)。
RabbitMQ
publisher(消息發送者)、exchange(交換機)、queue(隊列)、consumer(消息消費者)、virtual-host(虛擬主機)
消息模型:
消息發送者將消息發送給交換機,交換機路由到隊列,消費者監聽隊列。
為什么有 virtual-host 的存在 ?
一個公司中不同項目使用同一套 MQ 的服務,那這樣不同項目的交換機和隊列就可能會有沖突。所以就像數據庫一樣,每個項目有自己的 virtual-host,不同的 virtal-host 有不同的交換機和隊列,那么不同的 virtual-host 內的隊列和交換機就不會產生影響。 —— 數據隔離作用
1. RabbitMQ控制臺實現交換機路由到隊列
1.1 創建隊列
1.2 將消息發送給交換機,是否會到達隊列
交換機綁定隊列:
綁定后,點擊綁定的隊列,可以看到:
模擬交換機接受消息和路由消息:
發送后,交換機顯示:
發送后,隊列 hello.que1 中:
交換機負責路由和轉發消息,本身不具備存儲消息的能力。
2. RabbitMQ控制臺實現數據隔離
2.1 添加一個用戶
可以看到,此時新增的用戶是沒有虛擬主機的:
點擊退出登錄后,使用剛剛新創建的用戶登錄:
此時沒有虛擬主機,無法進行任何的操作的。
2.2 創建新的虛擬主機
查看當前用戶的虛擬主機:
切換至剛剛創建的虛擬主機下,就不存在之前創建的隊列了:
不同虛擬主機下的交換機:
一般,不同的項目就創建不同的虛擬主機,保證數據的隔離