serverList);
-
- private CompositePredicate createCompositePredicate(AbstractDiscoveryEnabledPredicate discoveryEnabledPredicate, AvailabilityPredicate availabilityPredicate) {
- return CompositePredicate.withPredicates(discoveryEnabledPredicate, availabilityPredicate)
- .build();
- }
-}
diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/GrayLoadBalancer.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/GrayLoadBalancer.java
new file mode 100644
index 000000000..ad2efe0eb
--- /dev/null
+++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/GrayLoadBalancer.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.common.gateway.rule;
+
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+
+/**
+ * @author lengleng
+ * @date 2020/1/12
+ *
+ * 灰度路由
+ */
+public interface GrayLoadBalancer {
+
+ /**
+ * 根据serviceId 筛选可用服务
+ *
+ * @param serviceId 服务ID
+ * @param request 当前请求
+ * @return
+ */
+ ServiceInstance choose(String serviceId, ServerHttpRequest request);
+}
diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/MetadataAwareRule.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/MetadataAwareRule.java
deleted file mode 100755
index 92eea034e..000000000
--- a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/MetadataAwareRule.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2018-2025, lengleng All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * Neither the name of the pig4cloud.com developer nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * Author: lengleng (wangiegie@gmail.com)
- */
-
-package com.pig4cloud.pigx.common.gateway.rule;
-
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.system.HostInfo;
-import cn.hutool.system.SystemUtil;
-import com.netflix.loadbalancer.Server;
-import com.pig4cloud.pigx.common.core.util.SpringContextHolder;
-import com.pig4cloud.pigx.common.gateway.predicate.AbstractDiscoveryEnabledPredicate;
-import com.pig4cloud.pigx.common.gateway.predicate.GrayMetadataAwarePredicate;
-import com.pig4cloud.pigx.common.gateway.support.PigxRibbonRuleProperties;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.util.PatternMatchUtils;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * ribbon 路由规则器
- *
- * @author dream.lu
- */
-@Slf4j
-public class MetadataAwareRule extends AbstractDiscoveryEnabledRule {
-
- public MetadataAwareRule() {
- this(new GrayMetadataAwarePredicate());
- }
-
- public MetadataAwareRule(AbstractDiscoveryEnabledPredicate predicate) {
- super(predicate);
- }
-
- @Override
- public List filterServers(List serverList) {
- PigxRibbonRuleProperties ribbonProperties = SpringContextHolder.getBean(PigxRibbonRuleProperties.class);
- List priorIpPattern = ribbonProperties.getPriorIpPattern();
-
- if (ribbonProperties.isGrayEnabled()) {
- return serverList;
- }
-
- // 1. 查找是否有本机 ip
- HostInfo hostInfo = SystemUtil.getHostInfo();
- String hostIp = hostInfo.getAddress();
-
- // 优先的 ip 规则
- boolean hasPriorIpPattern = !priorIpPattern.isEmpty();
- String[] priorIpPatterns = priorIpPattern.toArray(new String[0]);
-
- List priorServerList = new ArrayList<>();
- for (Server server : serverList) {
- String host = server.getHost();
- // 2. 优先本地 ip 的服务
- if (!hasPriorIpPattern && ObjectUtil.equal(hostIp, host)) {
- log.debug("{} 不存在优先配置,本地路由条件", hostIp);
- return Collections.singletonList(server);
- }
- // 3. 优先的 ip 服务
- if (hasPriorIpPattern && PatternMatchUtils.simpleMatch(priorIpPatterns, host)) {
- log.debug("{} 存在优先配置,ribbon 强制路由", priorIpPatterns);
- priorServerList.add(server);
- }
- }
-
- // 4. 如果优先的有数据直接返回
- if (!priorServerList.isEmpty()) {
- return priorServerList;
- }
-
- return Collections.unmodifiableList(serverList);
- }
-
-}
diff --git a/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java
new file mode 100644
index 000000000..07c69a1e9
--- /dev/null
+++ b/pigx-common/pigx-common-gateway/src/main/java/com/pig4cloud/pigx/common/gateway/rule/VersionGrayLoadBalancer.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.common.gateway.rule;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import com.pig4cloud.pigx.common.core.constant.CommonConstants;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.gateway.support.NotFoundException;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lengleng
+ * @date 2020/1/12
+ *
+ * 基于客户端版本号灰度路由
+ */
+@Slf4j
+@AllArgsConstructor
+public class VersionGrayLoadBalancer implements GrayLoadBalancer {
+ private DiscoveryClient discoveryClient;
+
+
+ /**
+ * 根据serviceId 筛选可用服务
+ *
+ * @param serviceId 服务ID
+ * @param request 当前请求
+ * @return
+ */
+ @Override
+ public ServiceInstance choose(String serviceId, ServerHttpRequest request) {
+ List instances = discoveryClient.getInstances(serviceId);
+
+ //注册中心无实例 抛出异常
+ if (CollUtil.isEmpty(instances)) {
+ log.warn("No instance available for {}", serviceId);
+ throw new NotFoundException("No instance available for " + serviceId);
+ }
+
+ // 获取请求version,无则随机返回可用实例
+ String reqVersion = request.getHeaders().getFirst(CommonConstants.VERSION);
+ if (StrUtil.isBlank(reqVersion)) {
+ return instances.get(RandomUtil.randomInt(instances.size()));
+ }
+
+ // 遍历可以实例元数据,若匹配则返回此实例
+ for (ServiceInstance instance : instances) {
+ Map metadata = instance.getMetadata();
+ String targetVersion = MapUtil.getStr(metadata, CommonConstants.VERSION);
+ if (reqVersion.equalsIgnoreCase(targetVersion)) {
+ log.debug("gray requst match success :{} {}", reqVersion, instance);
+ return instance;
+ }
+ }
+ return instances.get(RandomUtil.randomInt(instances.size()));
+ }
+}
diff --git a/pigx-common/pigx-common-gray/pom.xml b/pigx-common/pigx-common-gray/pom.xml
new file mode 100644
index 000000000..343520e64
--- /dev/null
+++ b/pigx-common/pigx-common-gray/pom.xml
@@ -0,0 +1,49 @@
+
+
+
+
+ 4.0.0
+
+ com.pig4cloud
+ pigx-common
+ 3.6.0
+
+
+ pigx-common-gray
+ jar
+
+ pigx 灰度路由
+
+
+
+ com.pig4cloud
+ pigx-common-core
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ io.github.openfeign
+ feign-core
+
+
+
diff --git a/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayRibbonLoadBalancerConfiguration.java b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayRibbonLoadBalancerConfiguration.java
new file mode 100644
index 000000000..bae8ca647
--- /dev/null
+++ b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/GrayRibbonLoadBalancerConfiguration.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.common.gray;
+
+import com.pig4cloud.pigx.common.gray.feign.GrayFeignRequestInterceptor;
+import com.pig4cloud.pigx.common.gray.rule.GrayRibbonLoadBalancerRule;
+import feign.RequestInterceptor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author lengleng
+ * @date 2020/1/12
+ */
+@Configuration
+@ConditionalOnProperty(value = "gray.rule.enabled", havingValue = "true")
+public class GrayRibbonLoadBalancerConfiguration {
+ @Bean
+ public GrayRibbonLoadBalancerRule ribbonLoadBalancerRule() {
+ return new GrayRibbonLoadBalancerRule();
+ }
+
+ @Bean
+ public RequestInterceptor pigxFeignTenantInterceptor() {
+ return new GrayFeignRequestInterceptor();
+ }
+}
diff --git a/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/feign/GrayFeignRequestInterceptor.java b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/feign/GrayFeignRequestInterceptor.java
new file mode 100644
index 000000000..1d261750f
--- /dev/null
+++ b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/feign/GrayFeignRequestInterceptor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.common.gray.feign;
+
+import cn.hutool.core.util.StrUtil;
+import com.pig4cloud.pigx.common.core.constant.CommonConstants;
+import com.pig4cloud.pigx.common.core.util.WebUtils;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author lengleng
+ * @date 2020/1/12
+ *
+ * feign 请求VERSION 传递
+ */
+@Slf4j
+public class GrayFeignRequestInterceptor implements RequestInterceptor {
+ /**
+ * Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
+ *
+ * @param template
+ */
+ @Override
+ public void apply(RequestTemplate template) {
+ String reqVersion = WebUtils.getRequest() != null
+ ? WebUtils.getRequest().getHeader(CommonConstants.VERSION) : null;
+
+ if (StrUtil.isNotBlank(reqVersion)) {
+ log.debug("feign gray add header version :{}", reqVersion);
+ template.header(CommonConstants.VERSION, reqVersion);
+ }
+ }
+}
diff --git a/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/rule/GrayRibbonLoadBalancerRule.java b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/rule/GrayRibbonLoadBalancerRule.java
new file mode 100644
index 000000000..5d71c22fc
--- /dev/null
+++ b/pigx-common/pigx-common-gray/src/main/java/com/pig4cloud/pigx/common/gray/rule/GrayRibbonLoadBalancerRule.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2018-2025, lengleng All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: lengleng (wangiegie@gmail.com)
+ */
+
+package com.pig4cloud.pigx.common.gray.rule;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.cloud.nacos.ribbon.NacosServer;
+import com.netflix.client.config.IClientConfig;
+import com.netflix.loadbalancer.AbstractLoadBalancerRule;
+import com.netflix.loadbalancer.ILoadBalancer;
+import com.netflix.loadbalancer.Server;
+import com.pig4cloud.pigx.common.core.constant.CommonConstants;
+import com.pig4cloud.pigx.common.core.util.WebUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author lengleng
+ * @date 2020/1/12
+ */
+@Slf4j
+public class GrayRibbonLoadBalancerRule extends AbstractLoadBalancerRule {
+ @Override
+ public void initWithNiwsConfig(IClientConfig iClientConfig) {
+
+ }
+
+ @Override
+ public Server choose(Object key) {
+ return choose(getLoadBalancer(), key);
+ }
+
+
+ public Server choose(ILoadBalancer lb, Object key) {
+ List reachableServers = lb.getReachableServers();
+
+ //注册中心无可用实例 抛出异常
+ if (CollUtil.isEmpty(reachableServers)) {
+ log.warn("No instance available for {}", key);
+ return null;
+ }
+
+ // 获取请求version,无则随机返回可用实例
+ String reqVersion = WebUtils.getRequest() != null
+ ? WebUtils.getRequest().getHeader(CommonConstants.VERSION) : null;
+ if (StrUtil.isBlank(reqVersion)) {
+ return reachableServers.get(RandomUtil.randomInt(reachableServers.size()));
+ }
+
+ // 遍历可以实例元数据,若匹配则返回此实例
+ for (Server server : reachableServers) {
+ NacosServer nacosServer = (NacosServer) server;
+ Map metadata = nacosServer.getMetadata();
+ String targetVersion = MapUtil.getStr(metadata, CommonConstants.VERSION);
+ if (reqVersion.equalsIgnoreCase(targetVersion)) {
+ log.debug("gray requst match success :{} {}", reqVersion, nacosServer);
+ return nacosServer;
+ }
+ }
+ return reachableServers.get(RandomUtil.randomInt(reachableServers.size()));
+ }
+
+}
diff --git a/pigx-common/pigx-common-gray/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-gray/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..0dc0c1d27
--- /dev/null
+++ b/pigx-common/pigx-common-gray/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+ com.pig4cloud.pigx.common.gray.GrayRibbonLoadBalancerConfiguration
\ No newline at end of file
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/ElasticJobAutoConfiguration.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/ElasticJobAutoConfiguration.java
similarity index 91%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/ElasticJobAutoConfiguration.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/ElasticJobAutoConfiguration.java
index 97afd9bb7..903ceca42 100755
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/ElasticJobAutoConfiguration.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/ElasticJobAutoConfiguration.java
@@ -15,14 +15,14 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job;
+package com.pig4cloud.pigx.common.gray;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
-import com.pig4cloud.pigx.common.job.jobinit.DataflowJobInitialization;
-import com.pig4cloud.pigx.common.job.jobinit.ScriptJobInitialization;
-import com.pig4cloud.pigx.common.job.jobinit.SimpleJobInitialization;
-import com.pig4cloud.pigx.common.job.properties.ElasticJobProperties;
+import com.pig4cloud.pigx.common.gray.jobinit.DataflowJobInitialization;
+import com.pig4cloud.pigx.common.gray.jobinit.ScriptJobInitialization;
+import com.pig4cloud.pigx.common.gray.jobinit.SimpleJobInitialization;
+import com.pig4cloud.pigx.common.gray.properties.ElasticJobProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/XxlJobAutoConfiguration.java
similarity index 92%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/XxlJobAutoConfiguration.java
index 7e81e44bd..b24fb5d79 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/XxlJobAutoConfiguration.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/XxlJobAutoConfiguration.java
@@ -15,9 +15,9 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job;
+package com.pig4cloud.pigx.common.gray;
-import com.pig4cloud.pigx.common.job.properties.XxlJobProperties;
+import com.pig4cloud.pigx.common.gray.properties.XxlJobProperties;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
@@ -32,7 +32,7 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration
@EnableAutoConfiguration
-@ComponentScan("com.pig4cloud.pigx.common.job.properties")
+@ComponentScan("com.pig4cloud.pigx.common.gray.properties")
public class XxlJobAutoConfiguration {
@Bean(initMethod = "start", destroyMethod = "destroy")
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxElasticJob.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/annotation/EnablePigxElasticJob.java
similarity index 90%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxElasticJob.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/annotation/EnablePigxElasticJob.java
index bd1d92460..da37b80fd 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxElasticJob.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/annotation/EnablePigxElasticJob.java
@@ -15,9 +15,9 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.annotation;
+package com.pig4cloud.pigx.common.gray.annotation;
-import com.pig4cloud.pigx.common.job.ElasticJobAutoConfiguration;
+import com.pig4cloud.pigx.common.gray.ElasticJobAutoConfiguration;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxXxlJob.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/annotation/EnablePigxXxlJob.java
similarity index 90%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxXxlJob.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/annotation/EnablePigxXxlJob.java
index aa40052aa..b57b7c5a9 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/annotation/EnablePigxXxlJob.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/annotation/EnablePigxXxlJob.java
@@ -15,9 +15,9 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.annotation;
+package com.pig4cloud.pigx.common.gray.annotation;
-import com.pig4cloud.pigx.common.job.XxlJobAutoConfiguration;
+import com.pig4cloud.pigx.common.gray.XxlJobAutoConfiguration;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/AbstractJobInitialization.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/AbstractJobInitialization.java
similarity index 98%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/AbstractJobInitialization.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/AbstractJobInitialization.java
index b9b81b5d8..9f0e2b014 100755
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/AbstractJobInitialization.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/AbstractJobInitialization.java
@@ -15,7 +15,7 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.jobinit;
+package com.pig4cloud.pigx.common.gray.jobinit;
import com.dangdang.ddframe.job.api.ElasticJob;
import com.dangdang.ddframe.job.api.JobType;
@@ -30,7 +30,7 @@ import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
-import com.pig4cloud.pigx.common.job.properties.ElasticJobProperties;
+import com.pig4cloud.pigx.common.gray.properties.ElasticJobProperties;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -46,7 +46,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import static com.pig4cloud.pigx.common.job.ElasticJobAutoConfiguration.DEFAULT_REGISTRY_CENTER_NAME;
+import static com.pig4cloud.pigx.common.gray.ElasticJobAutoConfiguration.DEFAULT_REGISTRY_CENTER_NAME;
/**
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/DataflowJobInitialization.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/DataflowJobInitialization.java
similarity index 94%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/DataflowJobInitialization.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/DataflowJobInitialization.java
index 66af592bb..989710152 100755
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/DataflowJobInitialization.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/DataflowJobInitialization.java
@@ -15,12 +15,12 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.jobinit;
+package com.pig4cloud.pigx.common.gray.jobinit;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.JobTypeConfiguration;
import com.dangdang.ddframe.job.config.dataflow.DataflowJobConfiguration;
-import com.pig4cloud.pigx.common.job.properties.ElasticJobProperties;
+import com.pig4cloud.pigx.common.gray.properties.ElasticJobProperties;
import java.util.Map;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/ScriptJobInitialization.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/ScriptJobInitialization.java
similarity index 94%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/ScriptJobInitialization.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/ScriptJobInitialization.java
index c7cbd5890..bded1fb30 100755
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/ScriptJobInitialization.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/ScriptJobInitialization.java
@@ -15,12 +15,12 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.jobinit;
+package com.pig4cloud.pigx.common.gray.jobinit;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.JobTypeConfiguration;
import com.dangdang.ddframe.job.config.script.ScriptJobConfiguration;
-import com.pig4cloud.pigx.common.job.properties.ElasticJobProperties;
+import com.pig4cloud.pigx.common.gray.properties.ElasticJobProperties;
import java.util.Map;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/SimpleJobInitialization.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/SimpleJobInitialization.java
similarity index 94%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/SimpleJobInitialization.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/SimpleJobInitialization.java
index fbbead7cb..551e6ba85 100755
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/jobinit/SimpleJobInitialization.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/jobinit/SimpleJobInitialization.java
@@ -15,12 +15,12 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.jobinit;
+package com.pig4cloud.pigx.common.gray.jobinit;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.JobTypeConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
-import com.pig4cloud.pigx.common.job.properties.ElasticJobProperties;
+import com.pig4cloud.pigx.common.gray.properties.ElasticJobProperties;
import java.util.Map;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/ElasticJobProperties.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/ElasticJobProperties.java
similarity index 98%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/ElasticJobProperties.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/ElasticJobProperties.java
index 7dbbab4d7..12d63de13 100755
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/ElasticJobProperties.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/ElasticJobProperties.java
@@ -15,7 +15,7 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.properties;
+package com.pig4cloud.pigx.common.gray.properties;
import com.dangdang.ddframe.job.api.JobType;
import lombok.Getter;
@@ -25,7 +25,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.LinkedHashMap;
import java.util.Map;
-import static com.pig4cloud.pigx.common.job.ElasticJobAutoConfiguration.DEFAULT_REGISTRY_CENTER_NAME;
+import static com.pig4cloud.pigx.common.gray.ElasticJobAutoConfiguration.DEFAULT_REGISTRY_CENTER_NAME;
/**
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlAdminProperties.java
similarity index 96%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlAdminProperties.java
index eda15b774..29d2ad359 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlAdminProperties.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlAdminProperties.java
@@ -15,7 +15,7 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.properties;
+package com.pig4cloud.pigx.common.gray.properties;
import lombok.Data;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlExecutorProperties.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlExecutorProperties.java
similarity index 97%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlExecutorProperties.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlExecutorProperties.java
index 09f56cec7..24d14d906 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlExecutorProperties.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlExecutorProperties.java
@@ -15,7 +15,7 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.properties;
+package com.pig4cloud.pigx.common.gray.properties;
import lombok.Data;
diff --git a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlJobProperties.java b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlJobProperties.java
similarity index 95%
rename from pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlJobProperties.java
rename to pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlJobProperties.java
index a45e0a475..15e8050a9 100644
--- a/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/job/properties/XxlJobProperties.java
+++ b/pigx-common/pigx-common-job/src/main/java/com/pig4cloud/pigx/common/gray/properties/XxlJobProperties.java
@@ -15,7 +15,7 @@
* Author: lengleng (wangiegie@gmail.com)
*/
-package com.pig4cloud.pigx.common.job.properties;
+package com.pig4cloud.pigx.common.gray.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java
index 819269f59..0f1029b48 100644
--- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java
+++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java
@@ -22,14 +22,12 @@ import cn.hutool.core.util.StrUtil;
import com.pig4cloud.pigx.admin.api.dto.UserInfo;
import com.pig4cloud.pigx.admin.api.entity.SysUser;
import com.pig4cloud.pigx.admin.api.feign.RemoteUserService;
-import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.util.R;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
@@ -62,14 +60,8 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService {
@Override
@SneakyThrows
public UserDetails loadUserByUsername(String username) {
- Cache cache = cacheManager.getCache(CacheConstants.USER_DETAILS);
- if (cache != null && cache.get(username) != null) {
- return (PigxUser) cache.get(username).get();
- }
-
R result = remoteUserService.info(username, SecurityConstants.FROM_IN);
UserDetails userDetails = getUserDetails(result);
- cache.put(username, userDetails);
return userDetails;
}
diff --git a/pigx-common/pom.xml b/pigx-common/pom.xml
index 46a7edf89..7d2bcbf31 100644
--- a/pigx-common/pom.xml
+++ b/pigx-common/pom.xml
@@ -38,6 +38,7 @@
pigx-common-data
pigx-common-datasource
pigx-common-gateway
+ pigx-common-gray
pigx-common-job
pigx-common-log
pigx-common-minio
diff --git a/pigx-gateway/pom.xml b/pigx-gateway/pom.xml
index c97f8f620..20110e78a 100644
--- a/pigx-gateway/pom.xml
+++ b/pigx-gateway/pom.xml
@@ -47,6 +47,10 @@
com.pig4cloud
pigx-common-gateway
+
+ com.pig4cloud
+ pigx-common-gray
+
com.alibaba.cloud
diff --git a/pigx-gateway/src/main/resources/bootstrap.yml b/pigx-gateway/src/main/resources/bootstrap.yml
index 7f9f41e22..bdbe859da 100644
--- a/pigx-gateway/src/main/resources/bootstrap.yml
+++ b/pigx-gateway/src/main/resources/bootstrap.yml
@@ -5,6 +5,9 @@ spring:
application:
name: @artifactId@
cloud:
+ loadbalancer:
+ ribbon:
+ enabled: false
nacos:
discovery:
server-addr: ${NACOS-HOST:pigx-register}:${NACOS-PORT:8848}
@@ -13,4 +16,4 @@ spring:
file-extension: yml
shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
profiles:
- active: @profiles.active@
+ active: @profiles.active@
\ No newline at end of file
diff --git a/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java b/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java
index d31f9fe51..55fc6f750 100644
--- a/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java
+++ b/pigx-visual/pigx-daemon-elastic-job/src/main/java/com/pig4cloud/pigx/daemon/elastic/PigxDaemonElasticJobApplication.java
@@ -17,7 +17,7 @@
package com.pig4cloud.pigx.daemon.elastic;
-import com.pig4cloud.pigx.common.job.annotation.EnablePigxXxlJob;
+import com.pig4cloud.pigx.common.gray.annotation.EnablePigxXxlJob;
import com.pig4cloud.pigx.common.security.annotation.EnablePigxFeignClients;
import com.pig4cloud.pigx.common.security.annotation.EnablePigxResourceServer;
import com.pig4cloud.pigx.common.swagger.annotation.EnablePigxSwagger2;