推荐 Spring Boot/Cloud 视频:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
如何在Zuul中使用fallback功能
我们在项目中使用Spring cloud zuul的时候,有一种这样的需求,就是当我们的zuul进行路由分发时,如果后端服务没有启动,或者调用超时,这时候我们希望Zuul提供一种降级功能,而不是将异常暴露出来。
项目结构如下:
SrpingCLoudFallBack类
-
package com.example.demo.fallback;
-
-
import org.codehaus.jettison.json.JSONException;
-
import org.codehaus.jettison.json.JSONObject;
-
import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
-
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;
-
-
/**
-
* 自定义Zuul回退机制处理器。
-
*
-
* Provides fallback when a failure occurs on a route 英文意思就是说提供一个回退机制当路由后面的服务发生故障时。
-
*/
-
@Component
-
public
class SrpingCLoudFallBack implements ZuulFallbackProvider{
-
/**
-
* 返回值表示需要针对此微服务做回退处理(该名称一定要是注册进入 eureka 微服务中的那个 serviceId 名称);
-
*
-
* @return
-
*/
-
@Override
-
public String getRoute() {
-
return
"spring-cloud-user";
//api服务id,如果需要所有调用都支持回退,则return "*"或return null
-
}
-
-
@Override
-
public ClientHttpResponse fallbackResponse() {
-
return
new ClientHttpResponse() {
-
/**
-