Skip to content

Commit baf77f0

Browse files
committed
v1.2.1 可手动指定某个应用的负载均衡策略
1 parent 4b14034 commit baf77f0

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.wowtools.springcloudext</groupId>
88
<artifactId>ngineureka</artifactId>
9-
<version>1.2-SNAPSHOT</version>
9+
<version>1.2.1</version>
1010

1111
<parent>
1212
<groupId>org.springframework.boot</groupId>

src/main/java/org/wowtools/springcloudext/ngineureka/service/NginxService.java

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
import java.io.*;
1010
import java.util.HashMap;
11+
import java.util.Properties;
12+
import java.util.Set;
1113

1214
/**
1315
* 操作nginx的服务
@@ -49,6 +51,51 @@ public class NginxService {
4951
}
5052
}
5153

54+
}
55+
56+
/**
57+
* 负载均衡策略
58+
*/
59+
private final HashMap<String, String> loadBalancingStrategys;
60+
61+
{
62+
String path = Constant.rootPath + "loadBalancingStrategy.properties";
63+
if (new File(path).exists()) {
64+
Properties p = new Properties();
65+
try {
66+
p.load(ResourcesReader.readStream(path));
67+
} catch (IOException e) {
68+
throw new RuntimeException("loadBalancingStrategy.properties config err", e);
69+
}
70+
Set<String> appNames = p.stringPropertyNames();
71+
loadBalancingStrategys = new HashMap<>(appNames.size());
72+
for (String appName : appNames) {
73+
String value = p.getProperty(appName);
74+
String strategy;
75+
switch (value) {
76+
case "least_conn":
77+
strategy = "\tleast_conn;\n";
78+
break;
79+
case "ip_hash":
80+
strategy = "\tip_hash;\n";
81+
break;
82+
case "polling":
83+
strategy = "";
84+
break;
85+
case "url_hash":
86+
strategy = "\thash $request_uri;\n";
87+
break;
88+
case "fair":
89+
strategy = "\tfair;\n";
90+
break;
91+
default:
92+
strategy = "\tleast_conn;\n";
93+
}
94+
loadBalancingStrategys.put(appName, strategy);
95+
}
96+
} else {
97+
loadBalancingStrategys = new HashMap<>(0);
98+
}
5299

53100
}
54101

@@ -77,9 +124,14 @@ private void writeCfg(Record record) {
77124
for (ServiceRecord service : services) {
78125
String[] urls = service.getServiceUrls();
79126
String appName = service.getName();
127+
//upstream
80128
sbUpstream.append("upstream upstream-").append(appName).append("{\n");
81-
sbUpstream.append("\tleast_conn;\n");
82-
129+
String loadBalancingStrategy = loadBalancingStrategys.get(appName);
130+
if (null == loadBalancingStrategy) {
131+
loadBalancingStrategy = "\tleast_conn;\n";
132+
}
133+
sbUpstream.append(loadBalancingStrategy);
134+
//location
83135
sbServer.append("location ^~ /").append(appName).append("/ {\n");
84136
sbServer.append("\tproxy_pass http://upstream-").append(appName).append(";\n");
85137
String param = locationParams.get(appName);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#负载均衡策略配置,支持以下策略
2+
#least_conn 默认,最小连接数
3+
#ip_hash 通过客户端请求ip进行hash,再通过hash值选择后端server
4+
#polling 轮询
5+
#url_hash 通过请求url进行hash,再通过hash值选择后端server(需安装对应模块)
6+
#fair 按后端服务器的响应时间来分配请求,响应时间短的优先分配(需安装对应模块)
7+
#示例 myapp=url_hash 表示名称为myapp的这个应用使用url_hash策略
8+
ngineureka=polling

0 commit comments

Comments
 (0)