springcloud学习之Zuul网关

zuul:
  prefix: "/meetingfilm/"  ## 统一前缀
  routes:
    meetingfilm-user:
      path: /userapi/**
      serviceId: user-service
      retryable: true   # 是否允许重试 , 饿汉模式
    meetingfilm-cinema:
      path: /cinemaapi/**
      serviceId: cinema-service
      retryable: true
    meetingfilm-film:
      path: /filmapi/**
      serviceId: film-service
      retryable: true
    meetingfilm-hall:
      path: /hallapi/**
      serviceId: hall-service
      retryable: true
  • zuul可以通过配置完成请求路由配置
  • zuul服务路由默认支持serviceId作为上下文
  • ignored-services可以禁用serviceId

请求路由表达式

  • ?匹配任意单个字符
  • * 配置任意数量的字符
  • ** 配置任意数量的字符支持多级目录

zuul核心之filter

 RequestContext里面可以获取到request和response。

核心preFilter

Filter名称                                                          Filter作用

serverletDetectionFilter                                   检测当前请求是否使用zuulServlet来处理运行

FormBodyWrapperFilter                                 解析表单数据,并对下游请求进行重新编码

DebugFilter                                                    根据配置参数zuul.debug.request和请求中的debug参数来决定是否执行过滤器操作

preDecorationFilter                                        根据提供的RouteLocator确定在哪里如何路由

zuul与zull2的区别?

zuul使用的是阻塞式线程完成业务调用。zuul2使用的是异步线程调用。

zuul与hystrix的整合


/**
 * @author : 
 * @program : meetingfilm.apigwzuul
 * @description : 业务降级处理
 **/
public class MyFallback implements FallbackProvider {

     //多那个路由降级
    @Override
    public String getRoute() {
        return "film-service";
    }

    //降级时的处理方式
    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        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 {
                BaseResponseVO responseVO
                        = BaseResponseVO.serviceException(
                                new CommonServiceException(404, "请求有问题,请联系管理员"));
                String result = JSONObject.toJSONString(responseVO);
                return new ByteArrayInputStream(result.getBytes());
            }

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

zuul的cookie和头信息处理?

zuul会过滤一些安全的信息,例如cookie, set-cookie, authorization等。可以通过sensitiveHeaders来修改。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值