ソースを参照

update gateway module

reghao 8 ヶ月 前
コミット
20769d8b07

+ 11 - 6
gateway/src/main/java/cn/reghao/tnb/gateway/log/GlobalLogFilter.java → gateway/src/main/java/cn/reghao/tnb/gateway/log/AccessLogFilter.java

@@ -1,6 +1,5 @@
 package cn.reghao.tnb.gateway.log;
 
-import cn.reghao.tnb.gateway.log.GatewayLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.reactivestreams.Publisher;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
@@ -23,23 +22,29 @@ import java.util.*;
 import java.util.function.Consumer;
 
 /**
- * 全局 HTTP 日志过滤器
+ * HTTP 请求响应日志过滤器
  *
  * @author reghao
  * @date 2024-11-14 10:05:08
  */
 @Slf4j
 @Component
-public class GlobalLogFilter implements GlobalFilter, Ordered {
+public class AccessLogFilter implements GlobalFilter, Ordered {
     private final GatewayLogService gatewayLogService;
 
-    public GlobalLogFilter(GatewayLogService gatewayLogService) {
+    public AccessLogFilter(GatewayLogService gatewayLogService) {
         this.gatewayLogService = gatewayLogService;
     }
 
+    /**
+     * 自定义 GlobalFilter 的 order 值必须小于 -1,否则 NettyWriteResponseFilter 会在过滤器被调用前完成响应的发送
+     *
+     * @param
+     * @return
+     * @date 2025-07-17 16:36:01
+     */
     @Override
     public int getOrder() {
-        // 自定义 GlobalFilter 的 order 值必须小于 -1,否则 NettyWriteResponseFilter 会在过滤器被调用前完成响应的发送
         return -100;
     }
 
@@ -78,7 +83,7 @@ public class GlobalLogFilter implements GlobalFilter, Ordered {
                         DataBuffer join = dataBufferFactory.join(dataBuffers);
                         byte[] content = new byte[join.readableByteCount()];
                         join.read(content);
-                        // 释放内存
+                        // 释放内存
                         DataBufferUtils.release(join);
                         String responseBody = new String(content, StandardCharsets.UTF_8);
                         return bufferFactory.wrap(content);

+ 4 - 9
gateway/src/main/java/cn/reghao/tnb/gateway/log/GatewayLogService.java

@@ -1,8 +1,6 @@
 package cn.reghao.tnb.gateway.log;
 
-import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import cn.reghao.tnb.gateway.log.model.GatewayLog;
-import cn.reghao.tnb.gateway.mq.RabbitProducer;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.cloud.gateway.route.Route;
 import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
@@ -16,9 +14,6 @@ import org.springframework.web.util.UriComponentsBuilder;
 
 import java.net.InetSocketAddress;
 import java.net.URI;
-import java.time.Duration;
-import java.time.LocalDateTime;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -36,7 +31,7 @@ public class GatewayLogService {
     }
 
     public void saveGatewayLog(GatewayLog gatewayLog) {
-        //rabbitProducer.sendGatewayLog(gatewayLog);
+        rabbitProducer.sendGatewayLog(gatewayLog);
     }
 
     public void setGatewayLog(ServerWebExchange exchange) {
@@ -53,10 +48,10 @@ public class GatewayLogService {
         });
         gatewayLog.setResponseHeaders(responseHeaders);
 
-        LocalDateTime responseTime = LocalDateTime.now();
+        long responseTime = System.currentTimeMillis();
         gatewayLog.setResponseTime(responseTime);
         // 计算执行时间
-        long executeTime = Duration.between(gatewayLog.getRequestTime(), responseTime).toMillis();
+        long executeTime = responseTime-gatewayLog.getRequestTime();
         gatewayLog.setExecuteTime(executeTime);
         saveGatewayLog(gatewayLog);
     }
@@ -82,7 +77,7 @@ public class GatewayLogService {
         String requestId = headers.get("x-request-id").get(0);
         gatewayLog.setRequestId(requestId);
         String requestTimeStr = headers.get("x-request-time").get(0);
-        LocalDateTime requestTime = DateTimeConverter.localDateTime(Long.parseLong(requestTimeStr));
+        long requestTime = Long.parseLong(requestTimeStr);
         gatewayLog.setRequestTime(requestTime);
 
         InetSocketAddress remote = exchange.getRequest().getRemoteAddress();

+ 2 - 2
gateway/src/main/java/cn/reghao/tnb/gateway/mq/RabbitProducer.java → gateway/src/main/java/cn/reghao/tnb/gateway/log/RabbitProducer.java

@@ -1,4 +1,4 @@
-package cn.reghao.tnb.gateway.mq;
+package cn.reghao.tnb.gateway.log;
 
 import cn.reghao.jutil.jdk.serializer.JsonConverter;
 import cn.reghao.tnb.gateway.log.model.GatewayLog;
@@ -11,6 +11,7 @@ import org.springframework.stereotype.Component;
  */
 @Component
 public class RabbitProducer {
+    private final String routingKey = "tnb.log.access";
     private final RabbitTemplate rabbitTemplate;
 
     public RabbitProducer(RabbitTemplate rabbitTemplate) {
@@ -27,7 +28,6 @@ public class RabbitProducer {
     }
 
     public void sendGatewayLog(GatewayLog gatewayLog) {
-        String routingKey = "tnb.gateway.log";
         String jsonPayload = JsonConverter.objectToJson(gatewayLog);
         rabbitTemplate.convertAndSend(routingKey, jsonPayload);
     }

+ 8 - 6
gateway/src/main/java/cn/reghao/tnb/gateway/log/model/GatewayLog.java

@@ -1,31 +1,33 @@
 package cn.reghao.tnb.gateway.log.model;
 
-import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
-import java.time.LocalDateTime;
-import java.util.Date;
 import java.util.Map;
 
 /**
  * @author reghao
  * @date 2024-11-20 16:40:24
  */
-@Data
+@Setter
+@Getter
 public class GatewayLog {
     private String requestId;
+    // ms
+    private long requestTime;
     private String targetRoute;
     private String targetService;
     private String requestUrl;
     private String requestMethod;
     private Map<String, String> requestHeaders;
     private String requestBody;
-    private LocalDateTime requestTime;
     private String remoteAddr;
     private int remotePort;
     private int statusCode;
     private Map<String, String> responseHeaders;
     private String responseBody;
-    private LocalDateTime responseTime;
+    // ms
+    private long responseTime;
     // ms
     private long executeTime;
 

+ 3 - 3
gateway/src/main/java/cn/reghao/tnb/gateway/log/GlobalTokenFilter.java → gateway/src/main/java/cn/reghao/tnb/gateway/token/GlobalTokenFilter.java

@@ -1,10 +1,10 @@
-package cn.reghao.tnb.gateway.log;
+package cn.reghao.tnb.gateway.token;
 
 import cn.reghao.jutil.jdk.security.RsaCryptor;
 import cn.reghao.jutil.jdk.string.IDObfuscation;
 import cn.reghao.jutil.tool.jwt.Jwt;
-import cn.reghao.tnb.gateway.log.model.UserData;
-import cn.reghao.tnb.gateway.log.model.UserLogin;
+import cn.reghao.tnb.gateway.token.model.UserData;
+import cn.reghao.tnb.gateway.token.model.UserLogin;
 import cn.reghao.tnb.gateway.config.RedisKeys;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.ExpiredJwtException;

+ 1 - 1
gateway/src/main/java/cn/reghao/tnb/gateway/log/model/UserData.java → gateway/src/main/java/cn/reghao/tnb/gateway/token/model/UserData.java

@@ -1,4 +1,4 @@
-package cn.reghao.tnb.gateway.log.model;
+package cn.reghao.tnb.gateway.token.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 1 - 1
gateway/src/main/java/cn/reghao/tnb/gateway/log/model/UserLogin.java → gateway/src/main/java/cn/reghao/tnb/gateway/token/model/UserLogin.java

@@ -1,4 +1,4 @@
-package cn.reghao.tnb.gateway.log.model;
+package cn.reghao.tnb.gateway.token.model;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;