zoukankan      html  css  js  c++  java
  • spring cloud 容错之zuul回退和Zuul过滤器

      一、容错:Zuul回退

    如果微服务下线了,针对每个微服务,都需要回复一个中文提示,而不是报异常

    1、新建ConsumerFallbackProvider.java

    package com.pupeiyuan.fallback;
    
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.charset.Charset;
    
    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;
    
    @Component
    public class ConsumerFallbackProvider implements ZuulFallbackProvider {
    
        @Override
        public ClientHttpResponse fallbackResponse() {
            return new ClientHttpResponse() {
                
                @Override
                public HttpHeaders getHeaders() {
                    // headers设定
                    HttpHeaders headers = new HttpHeaders();
                    MediaType mt = new MediaType("application","json", Charset.forName("UTF-8"));
                    headers.setContentType(mt);
                    return headers;
                }
                
                @Override
                public InputStream getBody() throws IOException {
                    // 响应体
                    return new ByteArrayInputStream(("moveserver微服务不可用,请稍后再试。" + ConsumerFallbackProvider.this.getRoute()).getBytes());
                }
                
                @Override
                public String getStatusText() throws IOException {
                     return HttpStatus.BAD_REQUEST.getReasonPhrase();
                }
                
                @Override
                public HttpStatus getStatusCode() throws IOException {
                    return HttpStatus.BAD_REQUEST;
                }
                
                @Override
                public int getRawStatusCode() throws IOException {
                    return HttpStatus.BAD_REQUEST.value();
                }
                
                @Override
                public void close() {
                    // TODO Auto-generated method stub
                    
                }
            };
        }
    
        @Override
        public String getRoute() {
            // TODO Auto-generated method stub
            return "MOVESERVER";
        }
    
    }

    2、效果

    二、Zuul过滤器

    zuul还提供了过滤功能, 只要实现接口ZuulFilter即可对请求先进行筛选和过滤之后再路由到具体服务。

    1.新增PreZuulFilter.java

    package com.pupeiyuan.fallback;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    
    @Component
    public class PreZuulFilter extends ZuulFilter {
      private static final Logger LOGGER = LoggerFactory.getLogger(PreZuulFilter.class);
    
      @Override
      public boolean shouldFilter() {
        return true;
      }
    
      @Override
      public Object run() {
        HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
        String host = request.getRemoteHost();
        PreZuulFilter.LOGGER.info("请求的host:{}", host);
        return null;
      }
    
      @Override
      public String filterType() {
        return "pre";
      }
    
      @Override
      public int filterOrder() {
        return 1;
      }
    
    }

    2.效果如下

  • 相关阅读:
    CSS行高——line-height
    非替换元素和替换元素
    7-7 jmu_python_是否是数 (10 分)
    7-8 jmu-python-从列表中删除元素 (15 分)
    7-6 jmu_python_最大公约数&最小公倍数 (10 分)
    7-5 jmu-python-分段函数1 (10 分)
    7-4 jmu-python-判断是否构成三角形 (10 分)
    7-3 jmu-python-回文数判断(5位数字) (10 分)
    7-2 jmu-python-九九乘法表(矩形) (10 分)
    7-1 jmu-python-汇率兑换 (10 分)
  • 原文地址:https://www.cnblogs.com/pypua/p/10172351.html
Copyright © 2011-2022 走看看