Zuul和Hystrix无缝整合
在 Zuul 的 启动器中,包含了 hystrix 的 jar 包。所以我们不需要在项目中添加 Hystrix 的坐标
直接访问Zuul的地址:服务端口/hystrix.stream即可
当然,如果需要视图化查看的话,只需要通过搭建dashboard-view 服务通过可视化界面查看监控数据。
Zuul网关中实现对服务降级处理
Zuul网关中实现服务降级,只需要在Zuul网关的服务中,编写实现ZuulFallbackProvider接口的java类即可
getRoute方法是执行要为哪个服务配置降级处理
fallbackResponse方法是进行返回托底信息的,
具体方法说明看如下代码和注释:
@Component
public class ProductFallback implements ZuulFallbackProvider {
/**
* 指定需要托底处理的服务名
*/
@Override
public String getRoute() {
return "e-book-product-provider";
}
/**
* 服务无法使用时,返回的托底信息
*/
@Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
/**
* ClientHttpResponse 的 fallback 的状态码 返回HttpStatus
*/
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
/**
* ClientHttpResponse 的 fallback 的状态码 返回 int
*/
@Override
public int getRawStatusCode() throws IOException {
return getStatusCode().value();
}
/**
* ClientHttpResponse 的 fallback 的状态码 返回 String
*/
@Override
public String getStatusText() throws IOException {
return getStatusCode().getReasonPhrase();
}
/**
* 设置响应体
*/
@Override
public InputStream getBody() throws IOException {
String msg = "当前服务不可用,请稍后再试";
return new ByteArrayInputStream(msg.getBytes());
}
/**
* 设置响应的头信息
*/
@Override
public HttpHeaders getHeaders() {
HttpHeaders httpHeaders= new HttpHeaders();
MediaType mediaType = new MediaType("application","json", Charset.forName("utf-8"));
httpHeaders.setContentType(mediaType);
return httpHeaders;
}
@Override
public void close() {
}
};
}
}
注意,当前进行服务降级的服务,在注册中心必须存在,否则,会直接出404,No message available错误,不会进行降级


在e-book-product-provider服务中,手动将线程睡眠10秒,模拟请求超时,此时返回托底信息

