API网关服务 : Spring Cloud Zuul
Spring Cloud Zuul通过与Spring Cloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得所有其他微服务的实力信息,使得自动完成维护服务实例的工作。对于路由规则的维护,Zuul默认会通过服务名作为ContextPath的方式来创建路由映射。
开发者可以通过使用Zuul来创建各种检校过滤器,然后指定那些规则的请求需要执行检校逻辑,只有通过检校的才会被路由到具体的微服务里接口,否则返回错误提示。
快速入门
构建网关
- 构建spring boot工程,引入依赖
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency> - 创建启动类,添加EnableZuulProxy注解开启API网关服务功能
1
2
3
4
5
6
7
8
public class ApigatewayApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ApigatewayApplication.class).web(true).run(args);
}
} - 修改配置文件
1
2
3
4
5server:
port: 1501
spring:
application:
name: api-gateway
请求路由
传统路由方式
/api-a-url/**的路由都会到http://localhost:8080/;如:访问http://localhost:1501/api-a-url/hello会到http://localhost:8080/hello
1 | zuul: |
面向服务的路由
具体的路由由Eureka服务发现机制负责自动维护
- 添加Eureka的依赖
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency> - 配置服务路由
1
2
3
4
5
6
7
8zuul:
routes:
api-b:
path: /api-a/**
serviceId: hello-service
api-b:
path: /api-b/**
serviceId: feign-consurme
请求过滤
继承ZuulFilter抽象类并实现定义的4个抽象函数就可以完成对请求的拦截和过滤。
1 |
|
设置具体的配置类配置bean
1 |
|