SpringCloud微服务实战之网关服务zuul
2017-12-21 16:18
956 查看
Spring Cloud Zuul同样是基于NetFlix Zuul实现的API网关组件。主要用于解决1.对于路由规则和服务实例的维护问题。2.对于类似签名校验、登录校验在微服务架构中的冗余问题。
一、构建网关
1、新建Maven项目SpringCloud-zuul
2、在pom中添加zuul依赖
spring-cloud-starter-zuul该模块不仅包含了Netflix Zuul的核心依赖zuul-core,还包含下面的依赖:spring-cloud-starter-hystrix、spring-cloud-starter-ribbon、spring-cloud-starter-actuator。
3、使用注解@EnableZuulProxy开启Zuul的API网关注解。
4、配置application.properties文件
二、请求路由
1、传统路由方式
zuul.routes.api-a-url.path=/api-a-url/**
zuul.routes.api-a-url.url=http://localhost:9888
2、面向服务的路由
为了与Eureka整合,需要添加Eureka依赖
三、请求过滤
请求路由建立之后,客户端可以通过统一的API网关接口访问服务,但是不同的客户端的访问权限有差异,所以需要过滤请求。
zuul提供了ZuulFilter来实现过滤和拦截,我们只需要继承ZuulFilter类并实现他定义的4个抽象函数就可以实现过滤了。
filterType:过滤器类型,决定过滤器在什么生命周期里执行。
PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
ERROR:在其他阶段发生错误时执行该过滤器
filterOrder 过滤器执行顺序,当请求一个阶段中存在多个过滤器时,需要根据该方法的返回值来判断执行顺序。
shouldFilter 判断过滤器是否被执行,返回true代表执行。
run 过滤器执行的具体规则。
过滤器定义完成后,还需要再主类中添加如下才能启动过滤器。
一、构建网关
1、新建Maven项目SpringCloud-zuul
2、在pom中添加zuul依赖
<!-- add zuul depend --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency>
spring-cloud-starter-zuul该模块不仅包含了Netflix Zuul的核心依赖zuul-core,还包含下面的依赖:spring-cloud-starter-hystrix、spring-cloud-starter-ribbon、spring-cloud-starter-actuator。
3、使用注解@EnableZuulProxy开启Zuul的API网关注解。
4、配置application.properties文件
server.port=9000 spring.application.name=api-geteway eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/
二、请求路由
1、传统路由方式
zuul.routes.api-a-url.path=/api-a-url/**
zuul.routes.api-a-url.url=http://localhost:9888
2、面向服务的路由
为了与Eureka整合,需要添加Eureka依赖
zuul.routes.api-a.path=/api-a/** zuul.routes.api-a.serviceId=helloservice zuul.routes.api-b.path=/api-b/** zuul.routes.api-b.serviceId=feignconsumer
三、请求过滤
请求路由建立之后,客户端可以通过统一的API网关接口访问服务,但是不同的客户端的访问权限有差异,所以需要过滤请求。
zuul提供了ZuulFilter来实现过滤和拦截,我们只需要继承ZuulFilter类并实现他定义的4个抽象函数就可以实现过滤了。
package com.spring.springcloud.filter; import com.netflix.zuul.ZuulFilter; public class MyFilter extends ZuulFilter { @Override public Object run() { //实现过滤规则 return null; } @Override public boolean shouldFilter() { return true; } @Override public int filterOrder() { return 0; } @Override public String filterType() { return null; } }
filterType:过滤器类型,决定过滤器在什么生命周期里执行。
PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
ERROR:在其他阶段发生错误时执行该过滤器
filterOrder 过滤器执行顺序,当请求一个阶段中存在多个过滤器时,需要根据该方法的返回值来判断执行顺序。
shouldFilter 判断过滤器是否被执行,返回true代表执行。
run 过滤器执行的具体规则。
过滤器定义完成后,还需要再主类中添加如下才能启动过滤器。
@Bean public MyFilter myFilter(){ return new MyFilter(); }
相关文章推荐
- SpringCloud实战之Zuul网关服务
- SpringCloud(第 022 篇)Zuul 网关微服务的 regexmapper 属性测试, 类似测试 zuul 的自定义路径规则一样
- springcloud项目(eureka服务发现+zuul网关)部署至docker中tomcat
- springCloud学习03之api服务网关zuul反向代理及重试配置
- springCloud学习05之api网关服务zuul过滤器filter
- springCloud(14):使用Zuul构建微服务网关-路由端点与路由配置详解
- springCloud(15):使用Zuul构建微服务网关-Header与文件上传和过滤器
- springcloud(6):服务网关zuul基础篇
- SpringCloud(第 022 篇)Zuul 网关微服务的 regexmapper 属性测试, 类似测试 zuul 的自定义路径规则一样
- SpringCloud的微服务网关:zuul(实践)
- springcloud(十):服务网关zuul
- springcloud(十):服务网关zuul初级篇
- SpringCloud之API网关服务Spring Cloud Zuul实例
- springCloud(13):使用Zuul构建微服务网关-简介
- springcloud(十):服务网关zuul初级篇
- 独立使用zuul网关分发不同服务的请求、权限控制,非SpringCloud
- springcloud(十):服务网关zuul初级篇
- Springcloud学习——Zuul服务网关及路由权限控制
- springcloud(十):服务网关zuul
- springcloud(十):服务网关zuul