主要是用于统一向外部系统提供REST接口的API,一般具备服务路由、均衡负载、权限控制等功能,使服务集群主体能够具备更高的复用性和测试性。
使用时在Spring Boot启动类上添加注解@EnableZuulProxy和@EnableDiscoveryClient(作为Eureka客户端),需要添加依赖:
<!-- Zuul服务网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- Eureka注册中心-客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置说明(.yml方式)
# 服务网关设置
zuul:
prefix: /api # 添加路由前缀
retryable: true
routes:
a-service: /test/** # 将a微服务映射到/test/**,这里使用简写方式zuul.routes.<serviceId>=<path>
# 忽略的服务
ignored-services:
- b-service
- c-service
add-host-header: true # 允许携带请求本身的host头信息
sensitive-headers: # 设置zuul的过滤头为空(所有的头信息全部展示)
## 负载均衡策略需要指定服务(serviceId)才能生效
a-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
## 负载均衡超时设置等可以不指定服务(serviceId)
ribbon:
ConnectTimeout: 250 # 连接超时时间(ms)
ReadTimeout: 2000 # 通信超时时间(ms)
OkToRetryOnAllOperations: true # 是否对所有操作重试
MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
MaxAutoRetries: 1 # 同一实例的重试次数
## 熔断超时时长设置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 6000 # 6000ms, 一般需要比ribbon超时时间长
外部需要访问时,只需要填写服务网关的地址,如http://ip:port/api/test/**,就可以访问到对内部服务a-service的请求。
服务网关还涉及到跨域、过滤、熔断的处理,等以后在添加吧