目标
- wallet扩展为多节点
- 调用userInfo接口测试负载均衡
- Ribbon参数测试
测试负载均衡
修改wallet端口配置
# 随机端口号
server.port=${random.int[8100,8199]}
# 服务名
spring.application.name=wallet
# eureka服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:5000/eureka/
修改接口返回信息
@EnableEurekaClient
@SpringBootApplication
@RestController
@RequestMapping
public class MainApplication {
@Value("${server.port}")
private int serverPort;
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
@GetMapping("getWallet")
public String getWallet() {
return "this is wallet info. from port : " + serverPort;
}
}
启动多实例wallet
image.png已有多个wallet实例注册到eureka-server中
多次访问 http://localhost:8000/userInfo
wallet的请求可以自动负载到8001、8002两个端口实例上
测试Ribbon参数
参数 | 描述 | 备注
- | -
spring.cloud.loadbalancer.retry.enabled | 是否开启重试 true false
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds | 断路器的超时时间需要大于Ribbon的超时时间,不然不会触发重试
ribbon.ConnectTimeout | 连接超时时间
ribbon.ReadTimeout | 流读取超时时间
ribbon.OkToRetryOnAllOperations | 所有请求都允许重试
ribbon.MaxAutoRetries | 当前实例重试次数
ribbon.MaxAutoRetriesNextServer | 下一实例重试次数
关于MaxAutoRetries 与 MaxAutoRetriesNextServer参数,当连接超时的时候,Ribbon会先对当前实例进行重试,如果失败则重新获取新的实例进行重试。
wallet增加sleep
@EnableEurekaClient
@SpringBootApplication
@RestController
@RequestMapping
public class MainApplication {
@Value("${server.port}")
private int serverPort;
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
@GetMapping("getWallet")
public String getWallet() {
System.out.println("请求getWallet" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()));
try {
Thread.sleep(5000);// 休眠5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
return "this is wallet info. from port : " + serverPort;
}
}
account增加Ribbon重试配置
spring.cloud.loadbalancer.retry.enabled=true
# 该参数要大于Ribbon超时时间,否则直接触发熔断机制,不会重试请求
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
ribbon.ConnectTimeout=3000
ribbon.ReadTimeout=3000
ribbon.OkToRetryOnAllOperations=true
ribbon.MaxAutoRetries=1
ribbon.MaxAutoRetriesNextServer=1
测试
访问 http://localhost:8000/userInfo
访问结果
wallet 1 日志:
请求getWallet2018-01-31 16:20:54:533
请求getWallet2018-01-31 16:20:57:542
wallet 2 日志:
请求getWallet2018-01-31 16:21:00:549
请求getWallet2018-01-31 16:21:03:554
从日志可以看出访问顺序:
- 调用wallet1
- 失败重试wallet1,重试次数受 ribbon.MaxAutoRetries 控制
- 失败切换wallet2
- 失败重试wallet2 ,重试次数受 ribbon.MaxAutoRetriesNextServer 控制
- 失败返回结果
网友评论