diff --git a/epmet-commons/epmet-commons-service-call/pom.xml b/epmet-commons/epmet-commons-service-call/pom.xml
new file mode 100644
index 0000000000..bb36df7e4c
--- /dev/null
+++ b/epmet-commons/epmet-commons-service-call/pom.xml
@@ -0,0 +1,33 @@
+
+
+
+ epmet-commons
+ com.epmet
+ 2.0.0
+
+ 4.0.0
+
+ epmet-commons-service-call
+ 0.3.1
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ io.github.openfeign
+ feign-httpclient
+ 10.3.0
+
+
+
+
\ No newline at end of file
diff --git a/epmet-commons/epmet-commons-service-call/src/main/java/com/epmet/loadbalancer/EpmetRequestLoadBalancerRule.java b/epmet-commons/epmet-commons-service-call/src/main/java/com/epmet/loadbalancer/EpmetRequestLoadBalancerRule.java
new file mode 100644
index 0000000000..4bd075dad0
--- /dev/null
+++ b/epmet-commons/epmet-commons-service-call/src/main/java/com/epmet/loadbalancer/EpmetRequestLoadBalancerRule.java
@@ -0,0 +1,94 @@
+package com.epmet.loadbalancer;
+
+import com.netflix.client.config.IClientConfig;
+import com.netflix.loadbalancer.ILoadBalancer;
+import com.netflix.loadbalancer.Server;
+import com.netflix.loadbalancer.ZoneAvoidanceRule;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * Epmet负载均衡算法规则类。当前支持读取环境变量,将请求重定向到指定的HOST:PORT
+ *
+ * @RibbonClient(name = "MS-PROXY", configuration = EpmetRequestLoadBalancerRule.class)
+ *
+ * @Bean
+ * @LoadBalanced
+ * public RestTemplate getRestTemplate() {
+ * return new RestTemplate();
+ * }
+ *
+ * @Bean
+ * public IRule getMyLoadBalancerRule(Environment env) {
+ * EpmetRequestLoadBalancerRule rule = new EpmetRequestLoadBalancerRule();
+ * rule.setEnv(env);
+ * return rule;
+ * }
+ *
+ */
+public class EpmetRequestLoadBalancerRule extends ZoneAvoidanceRule {
+
+ private static Logger logger = LoggerFactory.getLogger(EpmetRequestLoadBalancerRule.class);
+
+ private Environment env;
+
+ public EpmetRequestLoadBalancerRule() {
+ }
+
+ public void setEnv(Environment env) {
+ this.env = env;
+ }
+
+ @Override
+ public void initWithNiwsConfig(IClientConfig iClientConfig) {
+
+ }
+
+ /**
+ * 此处会取环境变量中"测试服务器"的值,
+ * @param key
+ * @return
+ */
+ @Override
+ public Server choose(Object key) {
+ ILoadBalancer loadBalancer = getLoadBalancer();
+ List servers = loadBalancer.getReachableServers();
+ if (CollectionUtils.isEmpty(servers)) {
+ logger.error("自定义负载均衡器:ReachableServers列表为空");
+ return super.choose(key);
+ }
+ Server server = servers.get(0);
+ String appName = server.getMetaInfo().getAppName();
+ String serviceName = appName.split("@@")[1];
+ String hostEnvKey = getHostEnvKey(serviceName);
+ String portEnvKey = getPortEnvKey(serviceName);
+ String epmetGovOrgHost = env.getProperty(hostEnvKey);
+ String epmetGovOrgPort = env.getProperty(portEnvKey);
+ if (StringUtils.isAnyBlank(epmetGovOrgHost, epmetGovOrgPort)) {
+ // 没有配置,走父类均衡器
+ return super.choose(key);
+ }
+
+ server.setHost(epmetGovOrgHost);
+ server.setPort(Integer.valueOf(epmetGovOrgPort));
+ return server;
+ }
+
+ /**
+ * 获取host环境变量Key
+ * @param serviceName
+ * @return
+ */
+ public String getHostEnvKey(String serviceName) {
+ return serviceName.replace("-", "_").concat("_HOST").toUpperCase();
+ }
+
+ public String getPortEnvKey(String serviceName) {
+ return serviceName.replace("-", "_").concat("_PORT").toUpperCase();
+ }
+}
diff --git a/epmet-commons/pom.xml b/epmet-commons/pom.xml
index 350503fdae..3f25f5b1b5 100644
--- a/epmet-commons/pom.xml
+++ b/epmet-commons/pom.xml
@@ -21,6 +21,7 @@
epmet-common-clienttoken
epmet-commons-tools-wx-ma
epmet-commons-tools-wx-mp
+ epmet-commons-service-call
diff --git a/epmet-module/gov-mine/gov-mine-server/pom.xml b/epmet-module/gov-mine/gov-mine-server/pom.xml
index 0eb920057f..465e254034 100644
--- a/epmet-module/gov-mine/gov-mine-server/pom.xml
+++ b/epmet-module/gov-mine/gov-mine-server/pom.xml
@@ -45,20 +45,27 @@
spring-boot-admin-starter-client
${spring.boot.admin.version}
+
+
+ com.epmet
+ epmet-commons-service-call
+ 0.3.1
+
+
-
+
com.epmet
gov-org-client
diff --git a/epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/config/LoadBalancerConfig.java b/epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/config/LoadBalancerConfig.java
new file mode 100644
index 0000000000..2c0b3411e7
--- /dev/null
+++ b/epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/config/LoadBalancerConfig.java
@@ -0,0 +1,29 @@
+package com.epmet.config;
+
+import com.epmet.loadbalancer.EpmetRequestLoadBalancerRule;
+import com.netflix.loadbalancer.IRule;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+@Configuration
+public class LoadBalancerConfig {
+
+ //@Bean
+ //@LoadBalanced
+ //public RestTemplate getRestTemplate() {
+ // return new RestTemplate();
+ //}
+
+ /**
+ * 自定义负载均衡算法bean
+ * @return
+ */
+ @Bean
+ public IRule getMyLoadBalancerRule(Environment env) {
+ EpmetRequestLoadBalancerRule rule = new EpmetRequestLoadBalancerRule();
+ rule.setEnv(env);
+ return rule;
+ }
+
+}
diff --git a/epmet-module/gov-org/gov-org-server/pom.xml b/epmet-module/gov-org/gov-org-server/pom.xml
index c731a93fb9..068c61a78d 100644
--- a/epmet-module/gov-org/gov-org-server/pom.xml
+++ b/epmet-module/gov-org/gov-org-server/pom.xml
@@ -40,20 +40,30 @@
org.springframework.boot
spring-boot-starter-actuator
+
+ com.epmet
+ epmet-commons-service-call
+ 0.3.1
+
+
+
+
+
+
-
+
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/config/LoadBalanceConfig.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/config/LoadBalanceConfig.java
new file mode 100644
index 0000000000..97bd3ae321
--- /dev/null
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/config/LoadBalanceConfig.java
@@ -0,0 +1,23 @@
+package com.epmet.config;
+
+import com.epmet.loadbalancer.EpmetRequestLoadBalancerRule;
+import com.netflix.loadbalancer.IRule;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
+@Configuration
+public class LoadBalanceConfig {
+
+ /**
+ * 自定义负载均衡算法bean
+ * @return
+ */
+ //@Bean
+ //public IRule getMyLoadBalancerRule(Environment env) {
+ // EpmetRequestLoadBalancerRule rule = new EpmetRequestLoadBalancerRule();
+ // rule.setEnv(env);
+ // return rule;
+ //}
+
+}