2.6.5 RabbitMQ -- 業務場景詳解
- 異步處理
- 應用解耦
- 流量削鋒
- 日志處理
- 串行方式
- 并行方式
- 異步方式
_userRepo.Add(user);
_emailService.Send(user);
_smsService.Send(user);
_userRepo.Add(user);
var emailTask = _emailService.Send(user);
var smsTask = _smsService.Send(user);
await Task.WhenAll(emailTask, smsTask)
var user = await _userRepo.Add(user);
_eventBus.publish(new UserRegisteredEvent(){ userId = user.Id })
return user;
訂單系統 調用 庫存系統
改為
訂單系統 寫入 消息隊列
庫存系統 訂閱 消息隊列
實作解耦
使用者的請求,伺服器接收後,首先寫入消息隊列。假如消息隊列的長度超過最大數量,則直接抛棄使用者請求或跳轉到錯誤頁面
秒殺業務根據消息隊列中的請求資訊,再做後續處理
kafka:接收使用者日志的消息隊列
Logstash:日志解析,統一成 JSON 輸出給 Elasticsearch
Elasticsearch:實時日志分析服務的核心技術,一個 schemaless,實時 的資料存儲服務,通過 index 組織資料,兼具強大的搜尋和統計功能
Kibana:基于 Elasticsearch 的資料可視化元件,超強的資料可視化能力是衆多公司選擇 ELK stack 的重要原因