当前位置:
尊龙游戏旗舰厅官网 >
前端技术
> javascript
>内容正文
javascript
springcloud教程-尊龙游戏旗舰厅官网
尊龙游戏旗舰厅官网
收集整理的这篇文章主要介绍了
springcloud教程- 路由网关zuul (springcloud版本greenwich.sr4)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- zuul简介
- 创建zuul-gateway工程
- 服务过滤
代码地址:github-spring-cloud地址
zuul简介
zuul是netflix开源的微服务网关,它可以和eureka、ribbon、hystrix等组件配合使用。zuul的核心是一些列的过滤器,这些过滤器可以完成以下功能。
- 身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符合的请求。
- 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
- 动态路由:动态的将请求路由到不同的后端集群。
- 压力测试:逐渐增加指向集群的流量,以了解性能。
- 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
- 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
- 多区域弹性:跨越aws region进行请求路由,旨在实现elb(elastic load balancing)使用的多样化,以及让系统的便越更贴近系统的使用者。
springcloud对zuul进行了整合和增强,zuul使用的默认http客户端是apache http client,也可以使用使用其他的。
使用zuul之后的架构如图所示(图片转载方志朋博客):
创建zuul-gateway工程
pom文件如下:
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0"xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactid>spring-cloud-learn</artifactid><groupid>com.sl.learn.cloud</groupid><version>1.0-snapshot</version></parent><modelversion>4.0.0</modelversion><groupid>com.sl.learn.cloud</groupid><artifactid>zuul-gateway</artifactid><version>1.0-snapshot</version><dependencies><dependency><groupid>org.springframework.cloud</groupid><artifactid>spring-cloud-starter-netflix-eureka-client</artifactid></dependency><dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-web</artifactid></dependency><dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-actuator</artifactid></dependency><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix --><dependency><groupid>org.springframework.cloud</groupid><artifactid>spring-cloud-starter-netflix-zuul</artifactid></dependency></dependencies></project>配置文件application.yml
server:port: 8089spring:application:name: zuul-gatewayeureka:client:serviceurl:defaultzone: http://localhost:8080/eureka/management:endpoints:web:exposure:include: '*'endpoint:health:show-details: alwaysshutdown:enabled: true zuul:routes:## 名字任意写api-feign:path: /api-feign/**## 注册到eureka idserviceid: eureka-feignapi-ribbon:path: /api-ribbon/**## 注册到eureka idserviceid: server-ribbon启动类zuulgatewayapplication
@springbootapplication @enablezuulproxy @enablediscoveryclient public class zuulgatewayapplication {public static void main(string[] args) {springapplication.run(zuulgatewayapplication.class,args);} }此工程依赖前面工程分别依次启动,
访问路径为a:http://localhost:8089/api-feign/hi?name=123
访问路径为b:http://localhost:8089//api-ribbon/hi?name=123
这说明zuul起到了路由的作用
服务过滤
自定义myzuulfilter
@component public class myzuulfilter extends zuulfilter {private static logger log = loggerfactory.getlogger(myzuulfilter.class);@overridepublic string filtertype() {return "pre";}@overridepublic int filterorder() {return 0;}@overridepublic boolean shouldfilter() {return false;}@overridepublic object run() throws zuulexception {requestcontext ctx = requestcontext.getcurrentcontext();httpservletrequest request = ctx.getrequest();log.info(string.format("%s >>> %s", request.getmethod(), request.getrequesturl().tostring()));object accesstoken = request.getparameter("token");if(accesstoken == null) {log.warn("token is empty");ctx.setsendzuulresponse(false);ctx.setresponsestatuscode(401);try {ctx.getresponse().getwriter().write("token is empty");}catch (exception e){}return null;}log.info("ok");return null;} }- filtertype:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
pre:路由之前
routing:路由之时
post: 路由之后
error:发送错误调用 - filterorder:过滤的顺序
- shouldfilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。
- run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。
访问地址不加token
访问地址加上token
总结
以上是尊龙游戏旗舰厅官网为你收集整理的springcloud教程- 路由网关zuul (springcloud版本greenwich.sr4)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 自定义springboot starte
- 下一篇: springcloud教程-分布式配置中