Browse Source

修改core-retrofit,在CustomizeRetrofitConfiguration增加自定义okhttp参数配置,包括三个超时时间和重试设置;
修改core-ai,将llm相关的接口读数据超时改为60秒;
修改tools-common,增加一种语法简化工具;

Signed-off-by: luoshi <luoshi@qmth.com.cn>

luoshi 9 tháng trước cách đây
mục cha
commit
349493fb26

+ 7 - 0
core-ai/src/main/java/com/qmth/boot/core/ai/config/LlmApiConfiguration.java

@@ -5,6 +5,8 @@ import com.qmth.boot.core.retrofit.interfaces.SignatureProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.time.Duration;
+
 public class LlmApiConfiguration implements CustomizeRetrofitConfiguration {
 
     private static final Logger log = LoggerFactory.getLogger(LlmApiConfiguration.class);
@@ -23,4 +25,9 @@ public class LlmApiConfiguration implements CustomizeRetrofitConfiguration {
     public SignatureProvider getSignature() {
         return null;
     }
+
+    @Override
+    public Duration getReadTimeout() {
+        return Duration.ofSeconds(60);
+    }
 }

+ 10 - 6
core-retrofit/src/main/java/com/qmth/boot/core/retrofit/core/RetrofitFactoryBean.java

@@ -14,6 +14,7 @@ import com.qmth.boot.core.retrofit.interceptor.LoggingInterceptor;
 import com.qmth.boot.core.retrofit.interceptor.RetryInterceptor;
 import com.qmth.boot.core.retrofit.interceptor.SignatureInterceptor;
 import com.qmth.boot.core.retrofit.interfaces.CustomizeRetrofitConfiguration;
+import com.qmth.boot.tools.syntax.Optional;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.binder.okhttp3.OkHttpMetricsEventListener;
 import okhttp3.ConnectionPool;
@@ -99,8 +100,10 @@ public class RetrofitFactoryBean<T> implements FactoryBean<T>, ApplicationContex
      */
     private OkHttpClient getOkHttpClient(RetrofitClient retrofitClient, CustomizeRetrofitConfiguration customize) {
         OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder().connectionPool(new ConnectionPool())
-                .connectTimeout(retrofitProperties.getConnectTimeout()).readTimeout(retrofitProperties.getReadTimeout())
-                .writeTimeout(retrofitProperties.getWriteTimeout());
+                .connectTimeout(
+                        Optional.firstNotNull(customize.getConnectTimeout(), retrofitProperties.getConnectTimeout()))
+                .readTimeout(Optional.firstNotNull(customize.getReadTimeout(), retrofitProperties.getReadTimeout()))
+                .writeTimeout(Optional.firstNotNull(customize.getWriteTimeout(), retrofitProperties.getWriteTimeout()));
 
         // add signature interceptor
         okHttpClientBuilder.addInterceptor(new SignatureInterceptor(customize.getSignature()));
@@ -109,10 +112,11 @@ public class RetrofitFactoryBean<T> implements FactoryBean<T>, ApplicationContex
         okHttpClientBuilder.addInterceptor(new ErrorDecodeInterceptor());
 
         // add retry interceptor
-        okHttpClientBuilder.addInterceptor(new RetryInterceptor(retrofitProperties.getRetry()));
+        okHttpClientBuilder.addInterceptor(new RetryInterceptor(
+                Optional.firstNotNull(customize.getRetryProperties(), retrofitProperties.getRetry())));
 
         // add logging interceptor
-        LogLevel logLevel = getLogLevel(retrofitClient);
+        LogLevel logLevel = getLogLevel(customize, retrofitClient);
         if (!logLevel.equals(LogLevel.OFF)) {
             okHttpClientBuilder.addNetworkInterceptor(new LoggingInterceptor(logLevel));
         }
@@ -134,10 +138,10 @@ public class RetrofitFactoryBean<T> implements FactoryBean<T>, ApplicationContex
         return url;
     }
 
-    private LogLevel getLogLevel(RetrofitClient retrofitClient) {
+    private LogLevel getLogLevel(CustomizeRetrofitConfiguration customize, RetrofitClient retrofitClient) {
         LogLevel level = retrofitClient.logLevel();
         if (level.equals(LogLevel.OFF)) {
-            level = retrofitProperties.getLogLevel();
+            level = Optional.firstNotNull(customize.getLogLevel(), retrofitProperties.getLogLevel());
         }
         return level;
     }

+ 50 - 0
core-retrofit/src/main/java/com/qmth/boot/core/retrofit/interfaces/CustomizeRetrofitConfiguration.java

@@ -1,5 +1,10 @@
 package com.qmth.boot.core.retrofit.interfaces;
 
+import com.qmth.boot.core.retrofit.config.RetryProperties;
+import org.springframework.boot.logging.LogLevel;
+
+import java.time.Duration;
+
 /**
  * Retrofit客户端配置自定义扩展
  */
@@ -27,4 +32,49 @@ public interface CustomizeRetrofitConfiguration {
         return null;
     }
 
+    /**
+     * 自定义连接超时
+     *
+     * @return
+     */
+    default Duration getConnectTimeout() {
+        return null;
+    }
+
+    /**
+     * 自定义读数据超时
+     *
+     * @return
+     */
+    default Duration getReadTimeout() {
+        return null;
+    }
+
+    /**
+     * 自定义写数据超时
+     *
+     * @return
+     */
+    default Duration getWriteTimeout() {
+        return null;
+    }
+
+    /**
+     * 自定义重试配置
+     *
+     * @return
+     */
+    default RetryProperties getRetryProperties() {
+        return null;
+    }
+
+    /**
+     * 自定义日志级别
+     *
+     * @return
+     */
+    default LogLevel getLogLevel() {
+        return null;
+    }
+
 }

+ 25 - 0
tools-common/src/main/java/com/qmth/boot/tools/syntax/Optional.java

@@ -0,0 +1,25 @@
+package com.qmth.boot.tools.syntax;
+
+/**
+ * 多对象判断选择的语法简化工具
+ */
+public class Optional {
+
+    /**
+     * 输入多个可选对象,返回第一个非空
+     *
+     * @param array
+     * @param <T>
+     * @return
+     */
+    public static <T> T firstNotNull(T... array) {
+        if (array != null) {
+            for (T obj : array) {
+                if (obj != null) {
+                    return obj;
+                }
+            }
+        }
+        return null;
+    }
+}