1. Zuul的负载均衡
1.1 默认配置
Zull默认结合Ribbon实现负载均衡,Ribbon默认的负载均衡算法是ZoneAvoidanceRule
1.2 修改算法配置
配置方式和Ribbon的消费者中配置一样,也可以自定义随机算法
@Configuration
public class RibbonClientConfig {
@Bean
public IRule getRule() {
return new RandomRule();
}
}
2. 熔断配置
增加熔断配置,当服务不可用的时候,自动会触发熔断
@Component
public class MyZuulFallBack implements FallbackProvider {
private final Logger logger = LoggerFactory.getLogger(MyZuulFallBack.class);
/**
* getRoute方法的返回值就是要监听的挂掉的微服务名字
* api服务id,如果需要所有调用都支持回退,则return "*"或return null
*
* @return
*/
public String getRoute() {
return "*";
}
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
logger.info("--> route:{}进行熔断降级", route);
return new ClientHttpResponse() {
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
public int getRawStatusCode() throws IOException {
return this.getStatusCode().value();
}
public String getStatusText() throws IOException {
return this.getStatusCode().getReasonPhrase();
}
public void close() {
}
public InputStream getBody() throws IOException {
return new ByteArrayInputStream("服务不可用".getBytes());
}
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return headers;
}
};
}
}