标签:管理 ret png inf array ext lease charset pac
<properties> <spring-boot.version>2.1.9.RELEASE</spring-boot.version> <spring-cloud.version>Greenwich.SR4</spring-cloud.version> </properties>
<properties>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.1.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
spring: application: name: zuul-gateway-fallback server: port: 16163 eureka: client: service-url: defaultZone: http://root:admin@eureka1:8761/eureka/,http://root:admin@eureka2:8761/eureka/
package cn.arebirth.fallback; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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; @Component public class ProductProviderFallback implements FallbackProvider { private final Logger logger = LoggerFactory.getLogger(ProductProviderFallback.class); /** * getRoute方法的返回值就是要监听的挂掉的微服务的名字 * 如果需要所有服务都走这个熔断回退,则return "*" 或 return null * * @return */ @Override public String getRoute() { return "*"; } /** * 当服务无法执行的时候,返回托底信息 * * @param route * @param cause * @return */ @Override public ClientHttpResponse fallbackResponse(String route, Throwable cause) { logger.info("--> route:{}进行熔断降级", route); return new ClientHttpResponse() { /** * ClientHttpResponse的fallback的状态码 * @return * @throws IOException */ @Override public HttpStatus getStatusCode() throws IOException { return HttpStatus.OK; } /** * ClientHttpResponse的fallback的状态码 * @return * @throws IOException */ @Override public int getRawStatusCode() throws IOException { return this.getStatusCode().value(); } /** * ClientHttpResponse的fallback的状态码 * @return * @throws IOException */ @Override public String getStatusText() throws IOException { return this.getStatusCode().getReasonPhrase(); } /** * Close this response, freeing any resources created. */ @Override public void close() { } /** * 设置响应体 * @return * @throws IOException */ @Override public InputStream getBody() throws IOException { String content = "商品服务不可用,请与管理员联系"; return new ByteArrayInputStream(content.getBytes()); } /** * 设置响应头信息 * @return */ @Override public HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); MediaType mt = new MediaType("application", "json", Charset.forName("utf-8")); headers.setContentType(mt); return headers; } }; } }
package cn.arebirth; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public class ZuulGatewayFallbackApp { public static void main(String[] args) { SpringApplication.run(ZuulGatewayFallbackApp.class, args); } }
标签:管理 ret png inf array ext lease charset pac
原文地址:https://www.cnblogs.com/arebirth/p/springcloudzuulfallbackone.html