1. 前言

在开发工程中,我们发现当一个微服务挂掉之后,如果我们访问此微服务的接口,zuul也会挂掉。因为zuul负责分配请求,当目标微服务挂掉之后,zuul便找不到目标微服务,因为我们需要设置一个熔断,即使寻找不到目标微服务,zuul也不会挂掉。

比如我们停掉my-user微服务,然后访问其中的一个接口,zuul会出现以下错误。

微服务和VUE入门教程(16): zuul 熔断_微服务

2. 代码编写

2.1 新建ApiFallbackProvider.java

微服务和VUE入门教程(16): zuul 熔断_java_02

2.2 编写ApiFallbackProvider.java
package com.zuul.filter;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;@Component
public class ApiFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {// 所有请求,皆通过这里return "*";}@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {return HttpStatus.OK.value();}@Overridepublic String getStatusText() throws IOException {return HttpStatus.OK.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {//返回的内容,暂时不知道如何使用String response = "{\n" +"    \"msg\": \"core服务失去联系,请联系管理员\",\n" +"    \"code\": 400,\n" +"    \"data\": null\n" +"}";ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(response.getBytes());return byteArrayInputStream;}@Overridepublic HttpHeaders getHeaders() {HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.setContentType(MediaType.APPLICATION_JSON);return httpHeaders;}};}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.

3. 测试

微服务和VUE入门教程(16): zuul 熔断_java_03

同样关掉my-user,然后访问zuul,zuul没有挂掉。这样其他的微服务接口还可以继续使用。