ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springcloud 微服务的 Zuul 配置

2020-03-03 11:55:47  阅读:250  来源: 互联网

标签:服务 zuul springcloud 配置 client path routes Zuul ribbon


1、路由配置 

a、单例serverId映射

zuul:
  routes:
    client-a:
      path: /client/**
      serviceId: client-a

意思是,以/client/**为端点路径的服务都映射到client-a,这种配置还可以简写成下面的格式,二者效果完全一致:

官网 www.1b23.com
zuul:
  routes:
    client-a: /client/**

还有一种更粗暴的方式,就是映射的serverId都不用写,如下:

zuul:
  routes:
    client-a:

这种配置,zuul会为client-a添加一个默认的映射规则,即:/client/**,相当于上面的第一种配置方式。


b、单例URL映射

这种配置意思就是,网关路由到具体的服务地址,即:将serverId替换成url,如下:

zuul:
  routes:
    client-a:
      path: /client/**
      url: http://localhost:7070 #client-a的地址


c、多实例路由

默认情况下zuul会使用eureka中集成的负载均衡功能,如果要使用ribbon的负载均衡,就需要指定serverId,这个操作一定要禁用掉ribbon使用eureka,具体操作如下:


zuul:
  routes:
    ribbon-route:
      path: /ribbon/**
      serviceId: ribbon-routeribbon:
  eureka:
    enabled: false  #禁止Ribbon使用Eurekaribbon-route:  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList #定义获取服务列表方法
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule     #Ribbon LB Strategy 使用随机负载策略
    listOfServers: localhost:7070,localhost:7071     #client services for Ribbon LB 指定服务地址

d、forword本地跳转

假如在网关服务中,需要做一些逻辑处理,可以在配置url时,添加forword选项:

zuul:
  routes:
    client-a:
      path: /client/**
      url: forward:/client #跳转到网关服务中@GetMapping("/client")端点


e、相同路径加载


zuul:
  routes:    client-b:
      path: /client/**
      serviceId: client-b    client-a:
      path: /client/**
      serviceId: client-a

从上面的配置文件,可以看出,配置了两个工程的路由,即:client-a工程,client-b工程,但是二者的path路径是一致的,这种情况下,在加载访问的时候,后者会覆盖前者。

f、路由通配符

规则说明示例
/**匹配任意数量的路径与字符/client/add, /client/update, client/a, client/add/a, client/update/a/b
/*匹配任意数的字符/client/add, /client/update, client/a
/?匹配单个字符/client/a

2、功能配置

a、屏蔽服务、屏蔽路径

zuul:  ignored-services: client-b    #忽略的服务,防止服务侵入  ignored-patterns: /**/div/**  #忽略的接口,屏蔽接口
  routes:
    client-a: /client/**

加上 ignored-services 与 ignored-patterns 之后,zuul在拉取服务列表的时候,创建映射规则的时候,就会忽略掉client-b服务和/**/div/**接口。

b、过滤掉敏感请求头

正常我们使用HTTP请求服务,在header添加值进行传递,是很正常的一件事,协议的一些基本认证也都在header,比如cookie,或者把登录认证通过后的用户信息base64编码后,放在authorization里面,在系统内这种传递是没有问题的,但是如果系统与外部进行交互,这种可能就会出现异常,毕竟也要防患于未然,这时可以在zuul里边指定敏感头信息,切断它与下游的交互,如下:

zuul: routes: client-a: path: /client/** sensitiveHeaders: Cookie,Set-Cookie,Authorization serviceId: client-a

c、重定向

在实际企业级项目中,很多操作都是需要用户登录后,才可以进行操作的,为了防止用户登录成功后,在重定向的时候,将对应的服务地址暴露给用户,可以设置一个头,如下:

zuul:
  add-host-header: true         #重定向header问题
  routes:
    client-a: /client/**


d、重试机制

在生产环境中,可能由于各种原因,导致偶然请求失败,可以使用zuul结合ribbon做重试操作,如下:

zuul: retryable: true #开启重试 ribbon: MaxAutoRetries: 1 #同一个服务重试的次数(除去首次) MaxAutoRetriesNextServer: 1 #切换相同服务数量

但是,这个功能要慎用,因为有些接口需要保证幂等性。


标签:服务,zuul,springcloud,配置,client,path,routes,Zuul,ribbon
来源: https://blog.51cto.com/14622073/2475073

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有