Spring AOP + RocketMQ 實現企業級操作日志異步采集(實戰全流程)

Spring AOP + RocketMQ 實現企業級操作日志異步采集(實戰全流程)

?? 項目背景

在企業級微服務架構中,記錄操作日志是一項剛需。傳統方式常使用數據庫直接寫入或通過 Feign 調用日志微服務,但這樣存在耦合高、主流程阻塞、擴展性差等問題。

為此,我們將使用:

  • Spring AOP 實現非侵入式日志采集
  • RocketMQ 實現異步解耦投遞
  • Redis 實現消息冪等控制
  • DLQ 死信隊列保障日志消息最終可達

?? 技術選型

模塊技術
日志采集Spring AOP + 自定義注解
消息中間件RocketMQ + Spring Cloud Stream
冪等控制Redis
安全框架Sa-Token
監控 & 補償RocketMQ DLQ、自定義消費處理

?? 實現目標

  • 通過 @Log 注解攔截業務方法
  • 捕獲操作人、IP、請求參數、響應結果、執行耗時等日志信息
  • 使用 RocketMQ 異步投遞日志消息
  • 使用 Redis 做冪等處理,防止重復消費
  • 消費失敗自動重試,最終由 DLQ 消費者處理

?? Maven 依賴

確保主業務系統和日志服務都引入 RocketMQ 依賴:

<!-- RocketMQ Stream -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>

1?? 日志注解定義

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {String title() default "";BusinessType businessType() default BusinessType.OTHER;OperatorType operatorType() default OperatorType.MANAGE;boolean isSaveRequestData() default true;boolean isSaveResponseData() default true;String[] excludeParamNames() default {};
}

2?? AOP 切面實現(LogAspect)

  • 使用 @Before/@AfterReturning/@AfterThrowing 統一處理日志
  • 日志采集后調用 logMqService.saveSysLog() 異步發送到 MQ
  • 使用 ThreadLocal 計算執行耗時
@Aspect
@Component
public class LogAspect {private static final ThreadLocal<Long> TIME_THREADLOCAL = new NamedThreadLocal<>("Cost Time");private static final String[] EXCLUDE_PROPERTIES = {"password", "oldPassword", "newPassword", "confirmPassword", "credentials"};@Resource private HttpServletRequest request;@Resource private LogMqService logMqService;@Before("@annotation(controllerLog)")public void boBefore(JoinPoint joinPoint, Log controllerLog) {TIME_THREADLOCAL.set(System.currentTimeMillis());}@AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) {handleLog(joinPoint, controllerLog, null, jsonResult);}@AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) {handleLog(joinPoint, controllerLog, e, null);}protected void handleLog(final JoinPoint joinPoint, Log controllerLog, 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73282.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73282.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git Flow 分支管理策略

優勢 清晰的分支結構&#xff1a;每個分支都有明確的用途&#xff0c;便于團隊協作。 穩定的 master 分支&#xff1a;生產環境代碼始終穩定。 靈活的發布管理&#xff1a;通過發布分支和熱修復分支&#xff0c;可以靈活管理版本發布和緊急修復。 主要分支 master 分支 代表…

Altium Designer數模電學習筆記

模電 電容 **退耦&#xff1a;**利用通交阻直&#xff0c;將看似直流的信號中的交流成分濾除 &#xff08;一般用在給MPU供電&#xff0c;盡量小一些&#xff0c;10nf~100nf~1uf以下&#xff09; **濾波&#xff1a;**也可以理解為給電容充電&#xff0c;讓電容在電平為低時…

光譜儀與光譜相機的核心區別與協同應用

一、核心功能與數據維度 ?光譜儀? ?功能定位?&#xff1a;專注單點或線狀區域的光譜分析&#xff0c;通過色散元件&#xff08;光柵/棱鏡&#xff09;分離波長&#xff0c;生成一維或二維光譜曲線&#xff0c;用于量化光強、吸收率等參數?。 ?數據維度?&#xff1a;輸…

Pytorch中layernorm實現詳解

平時我們在編寫神經網絡時&#xff0c;經常會用到layernorm這個函數來加快網絡的收斂速度。那layernorm到底在哪個維度上進行歸一化的呢&#xff1f; 一、問題描述 首先借用知乎上的一張圖&#xff0c;原文寫的也非常好&#xff0c;大家有空可以去閱讀一下&#xff0c;鏈接放…

linux--時區查看和修改

查看當前時間和時區: 打開終端&#xff0c;輸入以下命令查看當前的日期和時間設置&#xff1a; timedatectl修改時區: 使用 timedatectl 命令來修改時區&#xff1a; sudo timedatectl set-timezone <時區>例如&#xff0c;設置時區為北京時間&#xff08;中國標準時間&a…

在windows下安裝windows+Ubuntu16.04雙系統(上)

這篇文章的內容主要來源于這篇文章&#xff0c;給文章很詳細的介紹了如何從windows下安裝windowsubuntu16.04雙系統。我剛開始裝雙系統都是參照這個方法&#xff0c;該作者前后更新了兩個版本&#xff0c;在這里對其稍微進行整理一下。 一、準備&#xff1a;&#xff08;這里推…

如何獲取thinkphp的所有發行版本

是的&#xff0c;你只需要一行代碼 composer show topthink/think --all 然后做了一個小實驗&#xff0c;神奇的事情發生了。是我眼睛花了嗎&#xff1f; 命令也能模糊查詢了嗎&#xff1f;tp6也太。。。。

算法模型從入門到起飛系列——遞歸(探索自我重復的奇妙之旅)

文章目錄 前言一、遞歸本質1.1 遞歸的要素1.2 遞歸特點 二、遞歸&迭代2.1 遞歸&迭代比較2.2 遞歸&迭代如何實現相同功能2.2.1 遞歸實現2.2.2 迭代實現2.2.3 性能對比 三、優雅的遞歸理解3.1 階乘計算分解3.2 [DFS](https://blog.csdn.net/qq_38315952/article/deta…

Android 系統進程啟動Activity方法說明

前面文章Android Activity的啟動器ActivityStarter入口說到Activity的恢復執行是由 mRootWindowContainer.resumeFocusedTasksTopActivities(mTargetRootTask, mStartActivity, mOptions, mTransientLaunch)來實現的&#xff0c;下面就看下它的實現。 RootWindowContainer類的…

PostgreSQL_安裝

目錄 前置&#xff1a; 安裝過程&#xff1a; 1 下載軟件 2 創建安裝文件夾和放置數據的文件夾 3 雙擊安裝 4 連接服務 前置&#xff1a; PostgreSQL 15 windows 10 專業版 安裝過程&#xff1a; 1 下載軟件 PostgreSQL: Downloads 大小326MB 2 創建安裝文件夾和放…

docker desktop 集成WSL Ubuntu22.04

Windows docker desktop 設置WSL ubuntu 22.04啟用與其他發行版的集成 Windows docker desktop 安裝參考 wsl ubuntu 22.04 查看我宿主機的docker desktop 容器全部的信息 wsl -d Ubuntu-22.04 -u root

從國家能源到浙江交通投資,全息技術在能源交通領域的創新應用

一、3D全息技術行業應用參數及設計制作要求 全息投影 全息投影技術通過激光器、全息片等設備&#xff0c;將物體的三維信息記錄下來&#xff0c;并在特定條件下再現。應用參數包括投影距離、投影面積、投影亮度等。設計制作要求&#xff1a;高清晰度、高亮度、低噪音、穩定性好…

新能源汽車充換站如何實現光儲充一體化管理?

長三角某換電站光伏板曬到發燙&#xff0c;卻因電網限電被迫切機&#xff1b;北京五環充電站每月多繳6萬超容費&#xff1b;深圳物流車充電高峰排隊3小時...當95%的充換站深陷“用不起綠電、扛不住擴容、算不清碳賬”困局&#xff0c;安科瑞用一組真實數據撕開行業潛規則&#…

二手Mac驗機過程

1.1 外觀檢查 螺絲是否擰過螺絲 1.2 關于本機中 序列號&#xff0c;盒子序列號&#xff0c;機器背部 核對參數 https://checkcoverage.apple.com/coverage 1.3 檢查apple ID與查找 1 登出 iCloud、iTunes、FaceTime、iMessage 在 Mac 上打開「訊息」應用程式&#xff0c;從上方…

C語言-狀態模式詳解與實踐 - OTA升級狀態機

文章目錄 C語言狀態模式詳解與實踐 - OTA升級狀態機1. 什么是狀態模式&#xff1f;2. 為什么需要狀態模式&#xff1f;3. 實際應用場景4. 代碼實現4.1 UML 關系圖4.2 頭文件 (ota_state.h)4.3 實現文件 (ota_state.c)4.4 使用示例 (main.c) 5. 代碼分析5.1 關鍵設計點5.2 實現特…

數據結構5(初):續寫排序

目錄 1、外排序 2、計數排序 1、外排序 上一節中提到的排序都可以用來進行內排序&#xff0c;但是只有歸并排序的思想可以用來進行外部排序&#xff0c;因為文件數據是沒辦法像數組那樣進行訪問的。 例如&#xff1a; #include <stdio.h> #include <assert.h> …

《當人工智能遇上廣域網:跨越地理距離的通信變革》

在數字化時代&#xff0c;廣域網作為連接全球信息的紐帶&#xff0c;讓數據能夠在不同地區的網絡之間流動。然而&#xff0c;地理距離給廣域網數據傳輸帶來諸多挑戰&#xff0c;如高延遲、低帶寬、信號衰減和不穩定等問題。幸運的是&#xff0c;飛速發展的人工智能技術為解決這…

Linux馮諾依曼體系與計算機系統架構認知(8)

文章目錄 前言一、馮諾依曼體系馮?諾依曼體系結構推導內存提高馮?諾依曼體系結構效率的方法你用QQ和朋友聊天時數據的流動過程與馮?諾依曼體系結構相關的一些知識 二、計算機層次結構分析操作系統(Operator System)驅動層的作用與意義系統調用接口(system call)用戶操作接口…

OpenCV的基本用法全解析

《小白入門&#xff1a;OpenCV的基本用法全解析》 嗨&#xff0c;朋友們&#xff01;之前咱們知道了OpenCV在機器視覺里就像個超級厲害的瑞士軍刀&#xff0c;那今天咱們就來好好嘮嘮&#xff0c;**OpenCV到底該怎么用呢&#xff1f;**這就像是拿到了一把好劍&#xff0c;咱們…

匯川EASY系列之以太網通訊(MODBUS_TCP做從站)

匯川easy系列PLC做MODBUS_TCP從站,不需要任何操作,但是有一些需要知道的東西。具體如下: 1、匯川easy系列PLC做MODBUS_TCP從站,,ModbusTCP服務器默認開啟,無需設置通信協議(即不需要配置),端口號為“502”。ModbusTCP從站最多支持31個ModbusTCP客戶端(ModbusTCP主站…