什么是Zuul?为什么要使用Zuul?https://github.com/Netflix/zuul/wiki
Zuul是从设备和网站到Netflix流应用程序后端的所有请求的前门。 作为边缘服务应用程序,Zuul旨在实现动态路由,监视,弹性和安全性。 它还可以根据需要将请求路由到多个Amazon Auto Scaling组。Zuul核心功能:过滤和路由。
zuul网关入门
1,pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
2,启动类注解@EnableZuulProxy
// @EnableZuulServer//该注解功能单一,有些过滤器会没有。
@EnableZuulProxy //启动zuul
@SpringBootApplication
public class GetwayApplication {
public static void main(String[] args) {
SpringApplication.run(GetwayApplication.class);
}
}
3,application.yml配置文件
server:
port: 8008
zuul:
routes: #路由:分发给不同的微服务(服务名称)
abc: #是路由id,任意值
path: /products-service/** #代表映射路径,会将符合该规则的所有以 /products-service/开头请求都映射到下面的url中。
url: http://127.0.0.1:8081 #映射路径对应的实际url地址
访问测试:http://localhost:8008/products-service/products/1
4,面向服务的路由配置(Zuul+Eureka)
上面的zuul配置中,映射的实际路径写死了,这不好扩展。所以修改使用Eureka面向服务的路由配置
4-1,添加pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
4-2,修改application.yml配置文件
zuul:
routes:
abc: #是路由id,任意值
path: /products-service/** #代表映射路径,会将符合该规则的所有以 /products-service/开头请求都映射到下面的serviceId中。
serviceId: products-service #服务id会在Eureka注册中心中找到调用此服务请求的路径。
#配Eureka
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka
配置路由的简化方式:
zuul:
routes:
products-service: /products-service/** #zuul的简化配置:key:服务id,value:映射路径,只要访问该映射路径都会转发到该服务
#配Eureka
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka
访问http://localhost:8008/products-service/products/2效果:
如果访问出现如下错误:
解决方法:zuul启用ribbon的负载均衡,需设置ribbon的超时时间大点,再如果不行,把zuul的默认连接超时时间也设置大点。
ribbon:
ReadTimeout: 5000 #负载均衡读出时间
ConnectTimeout: 5000 #连接时间
zuul:
host:
connect-timeout-millis: 6000 #HTTP连接超时要比Hystrix的大,默认值2000
socket-timeout-millis: 6000 #socket超时,默认值10000
注意:Ribbon的设置的时长不应大于Hystrix设置的时长。
其实,zuul配置文件中可以不用配置映射路由路径也可以,因为Eureka中已经默认为我们配置配置加载了相应格式的路径,即按照,Eureka中注册的服务名进行访问。
去掉zuul中路由配置,测试访问
http://localhost:8008/products-service/products/2
访问效果:
另一个注册服务访问效果:http://localhost:8008/consumer-demo/products/2
如果我们不想使用zuul中默认的路由规则的配置,那么我们可以进行如下修改:
zuul:
routes:
products-service: /products-service/**
ignored-services: #值是一个set集合,Set<String> ignoredServices
- consumer-demo #忽略该服务作为默认的路由规则。那么如果我们不配置该,那访问不了
#prefix: /a #默认prefix = "",即访问的时候需要加上/a,前缀才能访问。#http://localhost:8008/a/products-service/products/2
访问测试: