Browse Source

1.新建模块epmet-commons-service-call,用于服务发现和服务调用相关的配置定义

2.gov-org-server,gov-mine-server引入epmet-commons-service-call模块,新增了loadBalanc配置demo,暂未启用
master
wxz 5 years ago
parent
commit
c95e213b52
  1. 33
      epmet-commons/epmet-commons-service-call/pom.xml
  2. 94
      epmet-commons/epmet-commons-service-call/src/main/java/com/epmet/loadbalancer/EpmetRequestLoadBalancerRule.java
  3. 1
      epmet-commons/pom.xml
  4. 13
      epmet-module/gov-mine/gov-mine-server/pom.xml
  5. 29
      epmet-module/gov-mine/gov-mine-server/src/main/java/com/epmet/config/LoadBalancerConfig.java
  6. 16
      epmet-module/gov-org/gov-org-server/pom.xml
  7. 23
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/config/LoadBalanceConfig.java

33
epmet-commons/epmet-commons-service-call/pom.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>epmet-commons</artifactId>
<groupId>com.epmet</groupId>
<version>2.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>epmet-commons-service-call</artifactId>
<version>0.3.1</version>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 替换Feign原生httpclient -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.3.0</version>
</dependency>
</dependencies>
</project>

94
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<Server> 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();
}
}

1
epmet-commons/pom.xml

@ -21,6 +21,7 @@
<module>epmet-common-clienttoken</module> <module>epmet-common-clienttoken</module>
<module>epmet-commons-tools-wx-ma</module> <module>epmet-commons-tools-wx-ma</module>
<module>epmet-commons-tools-wx-mp</module> <module>epmet-commons-tools-wx-mp</module>
<module>epmet-commons-service-call</module>
</modules> </modules>
</project> </project>

13
epmet-module/gov-mine/gov-mine-server/pom.xml

@ -45,20 +45,27 @@
<artifactId>spring-boot-admin-starter-client</artifactId> <artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring.boot.admin.version}</version> <version>${spring.boot.admin.version}</version>
</dependency> </dependency>
<!--服务调用相关依赖-->
<dependency> <dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-service-call</artifactId>
<version>0.3.1</version>
</dependency>
<!--<dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency> </dependency>-->
<!-- 替换Feign原生httpclient --> <!-- 替换Feign原生httpclient -->
<dependency> <!--<dependency>
<groupId>io.github.openfeign</groupId> <groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId> <artifactId>feign-httpclient</artifactId>
<version>10.3.0</version> <version>10.3.0</version>
</dependency> </dependency>-->
<dependency> <dependency>
<groupId>com.epmet</groupId> <groupId>com.epmet</groupId>
<artifactId>gov-org-client</artifactId> <artifactId>gov-org-client</artifactId>

29
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;
}
}

16
epmet-module/gov-org/gov-org-server/pom.xml

@ -40,20 +40,30 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.epmet</groupId>
<artifactId>epmet-commons-service-call</artifactId>
<version>0.3.1</version>
</dependency>
<!--挪到了commons-service-call-->
<!--<dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency> </dependency>-->
<!-- 替换Feign原生httpclient --> <!-- 替换Feign原生httpclient -->
<dependency> <!--<dependency>
<groupId>io.github.openfeign</groupId> <groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId> <artifactId>feign-httpclient</artifactId>
<version>10.3.0</version> <version>10.3.0</version>
</dependency> </dependency>-->
<dependency> <dependency>

23
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;
//}
}
Loading…
Cancel
Save