微服务Zuul网关实现服务降级
spring boot版本:2.1.10.RELEASE
1、项目搭建
所需依赖及项目的搭建请参考上一篇博客 微服务中网关的作用及搭建
2、添加fallback的bean
在spring boot 2.0之前实现的是 ZuulFallbackProvider
接口,但是在spring boot 2.0之后实现的是 FallbackProvider
接口。
package com.ebook.zuul.fallback;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
/**
* @author:JZ
* @date:2020/1/28
*/
@Component
public class ProductFallbackProvider implements FallbackProvider {
/**
* 返回的是服务的路由,即服务的名称,
* 代表为哪个服务提供fallback
* @return
*/
@Override
public String getRoute() {
return "ebook-product-core";
}
@Override
public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
return new ClientHttpResponse() {
@Override
public HttpHeaders getHeaders() {
HttpHeaders header = new HttpHeaders();
MediaType mt = new MediaType("application", "json", Charset.forName("UTF-8"));
header.setContentType(mt);
return header;
}
@Override
public InputStream getBody() throws IOException {
String input="商品服务不可用,请联系管理员!";
return new ByteArrayInputStream(input.getBytes());
}
@Override
public HttpStatus getStatusCode() throws IOException {
//HttpResponse的fallback的状态码,HttpStatus值
return HttpStatus.OK;
}
@Override
public int getRawStatusCode() throws IOException {
//HttpResponse的fallback的状态码,int值
return this.getStatusCode().value();
}
@Override
public String getStatusText() throws IOException {
//HttpResponse的fallback的状态码,string
return this.getStatusCode().getReasonPhrase();
}
@Override
public void close() {
}
};
}
}
还没有评论,来说两句吧...