Jelajahi Sumber

fix 修复 由于alibaba sentinel 初始化机制变更导致的无法连接问题

疯狂的狮子Li 2 tahun lalu
induk
melakukan
eb6a717edf

+ 0 - 2
config/nacos/application-common.yml

@@ -74,8 +74,6 @@ spring:
     sentinel:
       # sentinel 开关
       enabled: true
-      # 取消控制台懒加载
-      eager: true
       transport:
         # dashboard控制台服务名 用于服务发现
         # 如无此配置将默认使用下方 dashboard 配置直接注册

+ 0 - 142
ruoyi-common/ruoyi-common-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/context/SentinelApplicationContextInitializer.java

@@ -1,142 +0,0 @@
-/*
- * Copyright 2024-2025 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.sentinel.custom.context;
-
-import com.alibaba.cloud.commons.lang.StringUtils;
-import com.alibaba.cloud.sentinel.SentinelConstants;
-import com.alibaba.cloud.sentinel.SentinelProperties;
-import com.alibaba.csp.sentinel.config.SentinelConfig;
-import com.alibaba.csp.sentinel.init.InitExecutor;
-import com.alibaba.csp.sentinel.log.LogBase;
-import com.alibaba.csp.sentinel.transport.config.TransportConfig;
-
-import org.dromara.common.core.utils.StreamUtils;
-import org.dromara.common.sentinel.config.properties.SentinelCustomProperties;
-import org.springframework.boot.context.properties.bind.Binder;
-import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.client.discovery.DiscoveryClient;
-import org.springframework.context.ApplicationContextInitializer;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.core.env.ConfigurableEnvironment;
-
-import java.util.List;
-
-import static com.alibaba.cloud.sentinel.SentinelConstants.BLOCK_PAGE_URL_CONF_KEY;
-import static com.alibaba.csp.sentinel.config.SentinelConfig.setConfig;
-
-/**
- * @author yuluo
- * @author <a href="mailto:yuluo08290126@gmail.com">yuluo</a>
- */
-
-public class SentinelApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
-
-	@Override
-	public void initialize(ConfigurableApplicationContext applicationContext) {
-
-		ConfigurableEnvironment environment = applicationContext.getEnvironment();
-		String applicationName = environment.getProperty("spring.application.name");
-		SentinelProperties sentinelProperties = Binder.get(environment)
-				.bindOrCreate(SentinelConstants.PROPERTY_PREFIX, SentinelProperties.class);
-        SentinelCustomProperties customProperties = Binder.get(environment)
-            .bindOrCreate("spring.cloud.sentinel.transport", SentinelCustomProperties.class);
-        DiscoveryClient discoveryClient = applicationContext.getBean(DiscoveryClient.class);
-        initSentinelConfig(sentinelProperties, applicationName, customProperties, discoveryClient);
-	}
-
-	private void initSentinelConfig(SentinelProperties properties, String applicationName,
-                                    SentinelCustomProperties customProperties, DiscoveryClient discoveryClient) {
-
-		if (StringUtils.isEmpty(System.getProperty(LogBase.LOG_DIR))
-				&& StringUtils.isNotBlank(properties.getLog().getDir())) {
-			System.setProperty(LogBase.LOG_DIR, properties.getLog().getDir());
-		}
-		if (StringUtils.isEmpty(System.getProperty(LogBase.LOG_NAME_USE_PID))
-				&& properties.getLog().isSwitchPid()) {
-			System.setProperty(LogBase.LOG_NAME_USE_PID,
-					String.valueOf(properties.getLog().isSwitchPid()));
-		}
-		if (StringUtils.isEmpty(System.getProperty(SentinelConfig.APP_NAME_PROP_KEY))
-				&& StringUtils.isNotBlank(applicationName)) {
-			System.setProperty(SentinelConfig.APP_NAME_PROP_KEY, applicationName);
-		}
-
-        if (StringUtils.isEmpty(System.getProperty(TransportConfig.SERVER_PORT))
-            && StringUtils.isNotBlank(properties.getTransport().getPort())) {
-            System.setProperty(TransportConfig.SERVER_PORT,
-                properties.getTransport().getPort());
-        }
-
-        if (StringUtils.isNotBlank(customProperties.getServerName())) {
-            List<ServiceInstance> instances = discoveryClient.getInstances(customProperties.getServerName());
-            String serverList = StreamUtils.join(instances, instance ->
-                String.format("http://%s:%s", instance.getHost(), instance.getPort()));
-            System.setProperty(TransportConfig.CONSOLE_SERVER, serverList);
-        } else {
-            if (StringUtils.isEmpty(System.getProperty(TransportConfig.CONSOLE_SERVER))
-                && StringUtils.isNotBlank(properties.getTransport().getDashboard())) {
-                System.setProperty(TransportConfig.CONSOLE_SERVER,
-                    properties.getTransport().getDashboard());
-            }
-        }
-
-		if (StringUtils.isEmpty(System.getProperty(TransportConfig.HEARTBEAT_INTERVAL_MS))
-				&& StringUtils
-				.isNotBlank(properties.getTransport().getHeartbeatIntervalMs())) {
-			System.setProperty(TransportConfig.HEARTBEAT_INTERVAL_MS,
-					properties.getTransport().getHeartbeatIntervalMs());
-		}
-		if (StringUtils.isEmpty(System.getProperty(TransportConfig.HEARTBEAT_CLIENT_IP))
-				&& StringUtils.isNotBlank(properties.getTransport().getClientIp())) {
-			System.setProperty(TransportConfig.HEARTBEAT_CLIENT_IP,
-					properties.getTransport().getClientIp());
-		}
-		if (StringUtils.isEmpty(System.getProperty(SentinelConfig.CHARSET))
-				&& StringUtils.isNotBlank(properties.getMetric().getCharset())) {
-			System.setProperty(SentinelConfig.CHARSET,
-					properties.getMetric().getCharset());
-		}
-		if (StringUtils
-				.isEmpty(System.getProperty(SentinelConfig.SINGLE_METRIC_FILE_SIZE))
-				&& StringUtils.isNotBlank(properties.getMetric().getFileSingleSize())) {
-			System.setProperty(SentinelConfig.SINGLE_METRIC_FILE_SIZE,
-					properties.getMetric().getFileSingleSize());
-		}
-		if (StringUtils
-				.isEmpty(System.getProperty(SentinelConfig.TOTAL_METRIC_FILE_COUNT))
-				&& StringUtils.isNotBlank(properties.getMetric().getFileTotalCount())) {
-			System.setProperty(SentinelConfig.TOTAL_METRIC_FILE_COUNT,
-					properties.getMetric().getFileTotalCount());
-		}
-		if (StringUtils.isEmpty(System.getProperty(SentinelConfig.COLD_FACTOR))
-				&& StringUtils.isNotBlank(properties.getFlow().getColdFactor())) {
-			System.setProperty(SentinelConfig.COLD_FACTOR,
-					properties.getFlow().getColdFactor());
-		}
-		if (StringUtils.isNotBlank(properties.getBlockPage())) {
-			setConfig(BLOCK_PAGE_URL_CONF_KEY, properties.getBlockPage());
-		}
-
-		// earlier initialize
-		if (properties.isEager()) {
-
-			InitExecutor.doInit();
-		}
-
-	}
-
-}

+ 51 - 0
ruoyi-common/ruoyi-common-sentinel/src/main/java/org/dromara/common/sentinel/config/SentinelCustomAutoConfiguration.java

@@ -0,0 +1,51 @@
+package org.dromara.common.sentinel.config;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.alibaba.cloud.sentinel.SentinelProperties;
+import com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration;
+import com.alibaba.csp.sentinel.init.InitExecutor;
+import com.alibaba.csp.sentinel.transport.config.TransportConfig;
+import org.dromara.common.core.utils.StreamUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.annotation.Bean;
+
+import java.util.List;
+
+/**
+ * @author Lion Li
+ */
+@AutoConfiguration(before = SentinelAutoConfiguration.class)
+@EnableConfigurationProperties({SentinelProperties.class, SentinelCustomProperties.class})
+public class SentinelCustomAutoConfiguration {
+
+    @Autowired
+    private SentinelProperties properties;
+    @Autowired
+    private SentinelCustomProperties customProperties;
+    @Autowired
+    private DiscoveryClient discoveryClient;
+
+    @Bean
+    public void sentinelInit() {
+        if (StringUtils.isNotBlank(customProperties.getServerName())) {
+            List<ServiceInstance> instances = discoveryClient.getInstances(customProperties.getServerName());
+            String serverList = StreamUtils.join(instances, instance ->
+                String.format("http://%s:%s", instance.getHost(), instance.getPort()));
+            System.setProperty(TransportConfig.CONSOLE_SERVER, serverList);
+        } else {
+            if (StringUtils.isEmpty(System.getProperty(TransportConfig.CONSOLE_SERVER))
+                && StringUtils.isNotBlank(properties.getTransport().getDashboard())) {
+                System.setProperty(TransportConfig.CONSOLE_SERVER,
+                    properties.getTransport().getDashboard());
+            }
+        }
+        // 手动初始化 sentinel
+        InitExecutor.doInit();
+    }
+
+
+}

+ 1 - 1
ruoyi-common/ruoyi-common-sentinel/src/main/java/org/dromara/common/sentinel/config/properties/SentinelCustomProperties.java → ruoyi-common/ruoyi-common-sentinel/src/main/java/org/dromara/common/sentinel/config/SentinelCustomProperties.java

@@ -1,4 +1,4 @@
-package org.dromara.common.sentinel.config.properties;
+package org.dromara.common.sentinel.config;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;

+ 1 - 1
ruoyi-common/ruoyi-common-sentinel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1 +1 @@
-
+org.dromara.common.sentinel.config.SentinelCustomAutoConfiguration