回顾:spring cloud 基本环境搭建
负载均衡策略
1.1初体验
- 步骤一:修改pom文件,修改调用方的pom文件,添加test依赖
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
- 步骤二:编写测试类,在调用方编写Junit测试类
package com.czxy;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
* Created by cjc.
*/
@SpringBootTest(classes=Client4Application.class) //Junit和Spring boot整合,将所有实例加载到spring容器。
@RunWith(SpringRunner.class) //JUnit和Spring整合,将spring容器中的数据注入当前类
public class TestRibbon {
@Resource
private RibbonLoadBalancerClient client;
@Test
public void testDemo(){
// 通过“服务名”获得对应服务实例
for (int i = 0; i < 10; i++) {
ServiceInstance instance = client.choose("servic");
System.out.println(instance.getHost() + ":" + instance.getPort());
}
}
}
- 步骤三:修改提供方yml文件,支持显示IP地址,并重启8081和8082
#服务名
spring:
application:
name: servic
#注册地址
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka
instance:
prefer-ip-address: true #显示IP地址
1.2 修改策略
- 给指定的“服务”设置策略
服务名.ribbon.NFLoadBalancerRuleClassName=策略实现类
servic:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #随机
#NFLoadBalancerRuleClassName : com.netflix.loadbalancer.BestAvailableRule #并发最少
#NFLoadBalancerRuleClassName : com.netflix.loadbalancer.WeightedResponseTimeRule #请求时间权重
2 重试机制
- 重试机制:服务B访问集群环境下的服务A,某一个服务A宕机,服务B将尝试访问其他可以使用的服务A。
- 9090访问 8081和8082
- 如果8082宕机了
- 9090将尝试访问8081
- 步骤一:修改pom文件,添加重试retry依赖
<!--重试机制-->
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
- 步骤二:修改yml文件,开启cloud重试机制
spring:
cloud:
loadbalancer:
retry:
enabled: true #开启重试机制
- 步骤三:修改yml文件,配置当前服务的重试参数
servic:
ribbon:
ConnectTimeout: 250 # Ribbon的连接超时时间
ReadTimeout: 1000 # Ribbon的数据读取超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetriesNextServer: 1 # 切换实例的重试次数
MaxAutoRetries: 1 # 对当前实例的重试次数
来源:CSDN
作者:Eros1onz
链接:https://blog.csdn.net/Eros1onz/article/details/103483216