在springcloud微服务中,有时候一个服务挂了,我们需要友好的提示,此时我们在api网关路由上做一下过滤,进行友好的提示处理.
代码如下:
importcom.fasterxml.jackson.databind.ObjectMapper; importcom.lujiangchuangzhu.seventeen.api.gateway.vo.BaseVO; importlombok.extern.slf4j.Slf4j; importorg.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; importorg.springframework.http.HttpHeaders; importorg.springframework.http.HttpStatus; importorg.springframework.http.client.ClientHttpResponse; importorg.springframework.http.MediaType; importorg.springframework.stereotype.Component; importjava.io.ByteArrayInputStream; importjava.io.IOException; importjava.io.InputStream; /** *Zull路由发起请求失败时的回滚处理 *Createdbyhmbon2018/3/29. */ @Slf4j @Component publicclassGenericFallbackProviderimplementsFallbackProvider{ @Override publicClientHttpResponsefallbackResponse(Throwablethrowable){ log.info("服务调用出现了异常:"+throwable.getMessage()); throwable.printStackTrace(); returncallback(); } /** *如果需要所有调用都支持回退,则return"*"或returnnull *@return */ @Override publicStringgetRoute(){ return"*"; } @Override publicClientHttpResponsefallbackResponse(){ returncallback(); } privateClientHttpResponsecallback(){ returnnewClientHttpResponse(){ @Override publicInputStreamgetBody()throwsIOException{ ObjectMappermapper=newObjectMapper(); BaseVOvo=newBaseVO(); vo.setCode(10000); vo.setMessage("服务器开小差了,请稍后再试!"); Stringjson=mapper.writeValueAsString(vo); returnnewByteArrayInputStream(json.getBytes("UTF-8")); } @Override publicHttpHeadersgetHeaders(){ HttpHeadersheaders=newHttpHeaders(); //和body中的内容编码一致,否则容易乱码 headers.setContentType(MediaType.APPLICATION_JSON_UTF8); returnheaders; } /** *网关向api服务请求是失败了,但是消费者客户端向网关发起的请求是OK的, *不应该把api的404,500等问题抛给客户端 *网关和api服务集群对于客户端来说是黑盒子 */ @Override publicHttpStatusgetStatusCode()throwsIOException{ returnHttpStatus.OK; } @Override publicintgetRawStatusCode()throwsIOException{ returnHttpStatus.OK.value(); } @Override publicStringgetStatusText()throwsIOException{ returnHttpStatus.OK.getReasonPhrase(); } @Override publicvoidclose(){ } }; } } FallbackProvider对这个接口实现就可以了.本文内容总结:
原文链接:https://www.cnblogs.com/huzi007/p/8865825.html