1

如何为多个zuul路由实现多个zuulFallbackProvider。 我不能看到一个答案如何使用除暴露restcontroller以外的属性,并实现一个hystrix命令的方法。Zuul为多个zuul路由实现多个ZuulFallbackProvider

我可以使用自己的zuulFallBackProvider bean来创建我的每个服务吗?

application.yml

server: 
     port: 8080 

    hystrix: 
     command: 
     default: 
      execution: 
      isolation: 
       thread: 
       timeoutInMilliseconds: 20000 

    ribbon: 
     ReadTimeout: 20000 
     ConnectTimeout: 20000 

    zuul: 
     prefix: /api 
     ignoredServices: '*' 
     host: 
     connect-timeout-millis: 20000 
     socket-timeout-millis: 20000 
     routes: 
     kicks-service: 
      path: /kicks/** 
      serviceId: kicks-service 
      stripPrefix: false 
      sensitiveHeaders: 
     kicks-inventory: 
      path: /inventory/** 
      serviceId: kicks-inventory 
      stripPrefix: false 
      sensitiveHeaders: 

这是我的示例应用程序

@SpringBootApplication 
    @EnableDiscoveryClient 
    @EnableZuulProxy 
    public class GatewayApplication { 

     public static void main(String[] args) { 
      SpringApplication.run(GatewayApplication.class, args); 
     } 

     @Bean 
     public Prefilter prefilter(){ 
      return new Prefilter(); 
     } 

     @Bean 
     public ZuulFallbackProvider zuulFallbackProvider() { 
      return new ZuulFallbackProvider() { 
       @Override 
       public String getRoute() { 
        return "kicks-inventory"; 
       } 

       @Override 
       public ClientHttpResponse fallbackResponse() { 
        return new ClientHttpResponse() { 
         @Override 
         public HttpStatus getStatusCode() throws IOException { 
          return HttpStatus.OK; 
         } 

         @Override 
         public int getRawStatusCode() throws IOException { 
          return 200; 
         } 

         @Override 
         public String getStatusText() throws IOException { 
          return "OK"; 
         } 

         @Override 
         public void close() { 

         } 

         @Override 
         public InputStream getBody() throws IOException { 
          return new ByteArrayInputStream("fallback".getBytes()); 
         } 

         @Override 
         public HttpHeaders getHeaders() { 
          HttpHeaders headers = new HttpHeaders(); 
          headers.setContentType(MediaType.APPLICATION_JSON); 
          return headers; 
         } 
        }; 
       } 
      }; 
     } 
    } 

回答