【问题标题】:Zuul Implementing Multiple ZuulFallbackProvider for multiple zuul routesZuul为多个zuul路由实现多个ZuulFallbackProvider
【发布时间】:2018-11-22 23:30:33
【问题描述】:

如何为多个 zuul 路由实现多个 zuulFallbackProvider。 除了公开restcontroller并使用hystrixcommand实现方法之外,我看不到如何使用属性来解决问题。

我可以使用自己的 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;
                        }
                    };
                }
            };
        }
    }

【问题讨论】:

    标签: spring spring-boot netflix-zuul netflix spring-cloud-netflix


    【解决方案1】:

    每条路由都需要一个单独的 bean。他们应该为 getRoute 方法返回不同的路线。

    请检查这个-http://tachniki.blogspot.in/2017/02/generic-ZuulFallbackProvider.html。希望它会使它稍微容易一些。

    【讨论】:

      【解决方案2】:

      您可以为所有路由设置一个默认的后备提供程序,否则您需要为每个路由设置一个后备提供程序。

      如果您想为所有路由提供默认回退 您可以创建一个 FallbackProvider 类型的 bean 并拥有 getRoute 方法返回 * 或 null。

      http://cloud.spring.io/spring-cloud-netflix/multi/multi__router_and_filter_zuul.html#hystrix-fallbacks-for-routes

      【讨论】:

        猜你喜欢
        • 2020-05-06
        • 2017-11-13
        • 2017-11-09
        • 2017-05-16
        • 2015-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        相关资源
        最近更新 更多