👉 這是一個或許對你有用的社群
《專案實戰(影片)》:從書中學,往事上“練” 《網際網路高頻面試題》:面朝簡歷學習,春暖花開 《架構 x 系統設計》:摧枯拉朽,掌控面試高頻場景題 《精進 Java 學習指南》:系統學習,網際網路主流技術棧 《必讀 Java 原始碼專欄》:知其然,知其所以然

👉這是一個或許對你有用的開源專案國產 Star 破 10w+ 的開源專案,前端包括管理後臺 + 微信小程式,後端支援單體和微服務架構。功能涵蓋 RBAC 許可權、SaaS 多租戶、資料許可權、商城、支付、工作流、大屏報表、微信公眾號、ERP、CRM、AI 大模型等等功能:
Boot 多模組架構:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 微服務架構:https://gitee.com/zhijiantianya/yudao-cloud 影片教程:https://doc.iocoder.cn 【國內首批】支援 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 雙版本
-
前言 -
1. 非同步處理:讓系統輕鬆一點 -
2. 流量削峰:穩住系統別崩 -
3. 服務解耦:減少相互牽制 -
4. 分散式事務:保證資料一致性 -
5. 廣播通知:一條訊息,通知多個服務 -
6. 日誌收集:分散式日誌集中化 -
7. 延遲任務:定時觸發操作 -
8. 資料同步:跨系統保持資料一致 -
9. 分散式任務排程 -
10. 檔案處理:非同步執行大檔案任務 -
總結

前言

基於 Spring Boot + MyBatis Plus + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
專案地址:https://github.com/YunaiV/ruoyi-vue-pro 影片教程:https://doc.iocoder.cn/video/
1. 非同步處理:讓系統輕鬆一點
場景
解決方案
示例程式碼
// 訂單服務:生產者
Order order = createOrder();
// 訂單生成邏輯
rabbitTemplate.convertAndSend(
"order_exchange"
,
"order_key"
, order);
System.out.println(
"訂單已生成,發簡訊任務交給MQ"
);
// 簡訊服務:消費者
@RabbitListener
(queues =
"sms_queue"
)
publicvoidsendSms(Order order)
{
System.out.println(
"傳送簡訊,訂單ID:"
+ order.getId());
// 呼叫簡訊服務介面
}
深度解析
基於 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的後臺管理系統 + 使用者小程式,支援 RBAC 動態許可權、多租戶、資料許可權、工作流、三方登入、支付、簡訊、商城等功能
專案地址:https://github.com/YunaiV/yudao-cloud 影片教程:https://doc.iocoder.cn/video/
2. 流量削峰:穩住系統別崩
場景
解決方案
示例程式碼
// 使用者提交秒殺請求:生產者
rabbitTemplate.convertAndSend(
"seckill_exchange"
,
"seckill_key"
, userRequest);
System.out.println(
"使用者秒殺請求已進入佇列"
);
// 秒殺服務:消費者
@RabbitListener
(queues =
"seckill_queue"
)
publicvoidprocessSeckill(UserRequest request)
{
System.out.println(
"處理秒殺請求,使用者ID:"
+ request.getUserId());
// 執行秒殺邏輯
}
深度解析
3. 服務解耦:減少相互牽制
場景
解決方案
示例程式碼
// 訂單服務:生產者
rabbitTemplate.convertAndSend(
"order_exchange"
,
"order_key"
, order);
System.out.println(
"訂單生成訊息已傳送"
);
// 庫存服務:消費者
@RabbitListener
(queues =
"stock_queue"
)
publicvoidupdateStock(Order order)
{
System.out.println(
"扣減庫存,訂單ID:"
+ order.getId());
}
// 支付服務:消費者
@RabbitListener
(queues =
"payment_queue"
)
publicvoidprocessPayment(Order order)
{
System.out.println(
"處理支付,訂單ID:"
+ order.getId());
}
深度解析
4. 分散式事務:保證資料一致性
場景
解決方案
示例程式碼
// 訂單服務:生產者
rabbitTemplate.convertAndSend(
"order_exchange"
,
"order_key"
, order);
System.out.println(
"訂單建立訊息已傳送"
);
// 庫存服務:消費者
@RabbitListener
(queues =
"stock_queue"
)
publicvoidupdateStock(Order order)
{
System.out.println(
"更新庫存,訂單ID:"
+ order.getId());
// 執行扣減庫存邏輯
}
深度解析
5. 廣播通知:一條訊息,通知多個服務
場景
解決方案
示例程式碼
// 生產者:廣播訊息
rabbitTemplate.convertAndSend(
"price_update_exchange"
,
""
, priceUpdate);
System.out.println(
"商品價格更新訊息已廣播"
);
// 消費者1:庫存服務
@RabbitListener
(queues =
"stock_queue"
)
publicvoidupdateStockPrice(PriceUpdate priceUpdate)
{
System.out.println(
"庫存價格更新:"
+ priceUpdate.getProductId());
}
// 消費者2:搜尋服務
@RabbitListener
(queues =
"search_queue"
)
publicvoidupdateSearchPrice(PriceUpdate priceUpdate)
{
System.out.println(
"搜尋價格更新:"
+ priceUpdate.getProductId());
}
深度解析
6. 日誌收集:分散式日誌集中化
場景
解決方案
示例程式碼
// 服務端:生產者
rabbitTemplate.convertAndSend(
"log_exchange"
,
"log_key"
, logEntry);
System.out.println(
"日誌已傳送"
);
// 日誌分析服務:消費者
@RabbitListener
(queues =
"log_queue"
)
publicvoidprocessLog(LogEntry log)
{
System.out.println(
"日誌處理:"
+ log.getMessage());
// 儲存或分析邏輯
}
7. 延遲任務:定時觸發操作
場景
解決方案
示例程式碼
// 生產者:傳送延遲訊息
rabbitTemplate.convertAndSend(
"delay_exchange"
,
"delay_key"
, order, message -> {
message.getMessageProperties().setDelay(
30
*
60
*
1000
);
// 延遲30分鐘
return
message;
});
System.out.println(
"訂單取消任務已設定"
);
// 消費者:處理延遲訊息
@RabbitListener
(queues =
"delay_queue"
)
publicvoidcancelOrder(Order order)
{
System.out.println(
"取消訂單:"
+ order.getId());
// 取消訂單邏輯
}
8. 資料同步:跨系統保持資料一致
場景
解決方案
示例程式碼
// 更新訂單狀態後,將訊息傳送到MQ
Order order = updateOrderStatus(orderId,
"PAID"
);
// 更新訂單狀態為已支付
rabbitTemplate.convertAndSend(
"order_exchange"
,
"order_status_key"
, order);
System.out.println(
"訂單狀態更新訊息已傳送:"
+ order.getId());
@RabbitListener
(queues =
"cache_update_queue"
)
publicvoidupdateCache(Order order)
{
System.out.println(
"更新快取,訂單ID:"
+ order.getId() +
" 狀態:"
+ order.getStatus());
// 更新快取邏輯
cacheService.update(order.getId(), order.getStatus());
}
@RabbitListener
(queues =
"recommendation_queue"
)
publicvoidupdateRecommendation(Order order)
{
System.out.println(
"更新推薦系統,訂單ID:"
+ order.getId() +
" 狀態:"
+ order.getStatus());
// 更新推薦服務邏輯
recommendationService.updateOrderStatus(order);
}
深度解析
-
減輕資料庫壓力 :避免多個服務同時查詢資料庫。 -
最終一致性 :即使某個服務處理延遲,MQ也能保障訊息不丟失,最終所有服務的資料狀態一致。
9. 分散式任務排程
場景
解決方案
示例程式碼
// 定時任務生成器
@Scheduled
(cron =
"0 0 0 * * ?"
)
// 每天凌晨觸發
publicvoidgenerateTasks()
{
List<Task> expiredTasks = taskService.getExpiredTasks();
for
(Task task : expiredTasks) {
rabbitTemplate.convertAndSend(
"task_exchange"
,
"task_routing_key"
, task);
System.out.println(
"任務已傳送:"
+ task.getId());
}
}
@RabbitListener
(queues =
"order_task_queue"
)
publicvoidprocessOrderTask(Task task)
{
System.out.println(
"處理訂單任務:"
+ task.getId());
// 執行訂單清理邏輯
orderService.cleanExpiredOrder(task);
}
@RabbitListener
(queues =
"stock_task_queue"
)
publicvoidprocessStockTask(Task task)
{
System.out.println(
"處理庫存任務:"
+ task.getId());
// 執行庫存釋放邏輯
stockService.releaseStock(task);
}
深度解析
-
重複執行 :每個服務只處理自己佇列中的任務。 -
任務遺漏 :MQ確保任務可靠傳遞,防止任務丟失。
10. 檔案處理:非同步執行大檔案任務
場景
解決方案
示例程式碼
// 上傳檔案後,將任務寫入MQ
FileTask fileTask =
new
FileTask();
fileTask.setFileId(fileId);
fileTask.setOperation(
"COMPRESS"
);
rabbitTemplate.convertAndSend(
"file_task_exchange"
,
"file_task_key"
, fileTask);
System.out.println(
"檔案處理任務已傳送,檔案ID:"
+ fileId);
@RabbitListener
(queues =
"file_task_queue"
)
publicvoidprocessFileTask(FileTask fileTask)
{
System.out.println(
"處理檔案任務:"
+ fileTask.getFileId() +
" 操作:"
+ fileTask.getOperation());
// 模擬檔案處理邏輯
if
(
"COMPRESS"
.equals(fileTask.getOperation())) {
fileService.compressFile(fileTask.getFileId());
}
elseif
(
"CONVERT"
.equals(fileTask.getOperation())) {
fileService.convertFileFormat(fileTask.getFileId());
}
// 更新任務狀態
taskService.updateTaskStatus(fileTask.getFileId(),
"COMPLETED"
);
}
// 前端輪詢檔案處理狀態
setInterval(() => {
fetch(`/file/status?fileId=${fileId}`)
.then(response => response.json())
.then(status => {
if
(status ===
"COMPLETED"
) {
alert(
"檔案處理完成!"
);
}
});
},
5000
);
深度解析
-
提升使用者體驗 :主執行緒迅速返回,減少使用者等待時間。 -
後臺任務靈活擴充套件 :支援多種操作邏輯,適應複雜檔案處理需求。
總結





