Open woshikid opened 2 years ago
POM
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
自定义服务列表
spring: cloud: discovery: client: simple: instances: test: # springApplicationName - instanceId: test-1 host: server1 port: 80 - instanceId: test-2 host: server2 port: 80
自动获取服务列表(依赖注册中心)
使用LoadBalancer
@Autowired private LoadBalancerClient loadBalancerClient; ServiceInstance serviceInstance = loadBalancerClient.choose(springApplicationName); String url = serviceInstance.getUri().toString();
注入RestTemplate
@Bean @LoadBalanced public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { return restTemplateBuilder .setConnectTimeout(Duration.ofMillis(1000)) // 连接超时 .setReadTimeout(Duration.ofMillis(1000)) // 请求超时 .build(); } String response = restTemplate.getForObject("http://%s/test".formatted(springApplicationName), String.class);
RestTemplate自动重试(依赖Spring Retry) 默认配置
spring: cloud: loadbalancer: # 默认为RoundRobinLoadBalancer retry: # 局部配置为spring.cloud.loadbalancer.clients.<springApplicationName>.retry maxRetriesOnSameServiceInstance: 0 # 当前服务器重试次数 maxRetriesOnNextServiceInstance: 1 # 尝试切换服务器次数 retryOnAllOperations: false # 重试非GET请求 retryableStatusCodes: [] # 默认404,500都不重试
POM
自定义服务列表
自动获取服务列表(依赖注册中心)
使用LoadBalancer
注入RestTemplate
RestTemplate自动重试(依赖Spring Retry) 默认配置