玩转SpringCloud(F版本) 四.路由网关(zuul)
本篇文章基于:
01)玩转SpringCloud 一.服务的注册与发现(Eureka)
02) 玩转SpringCloud 二.服务消费者(1)ribbon+restTemplate
03) 玩转SpringCloud 二.服务消费者(2)feign
04) 转SpringCloud 三.断路器(Hystrix)RestTemplate+Ribbon和Feign两种方式
四.路由网关(zuul)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。
在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服。,服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理,配置服务的配置文件放在git仓库,方便开发人员随时改配置。
一、Zuul简介
Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。
zuul有以下功能:
· Authentication
· Insights
· Stress Testing
· Canary Testing
· Dynamic Routing
· Service Migration
· Load Shedding
· Security
· Static Response handling
· Active/Active traffic management
二、配置路由
项目架构:
在原有的工程上,创建一个新的工程。demo5
依赖主工程以及所需jar包:
<parent><groupId>com.fsdm</groupId><artifactId>SpringCloud_test1</artifactId><version>1.0-SNAPSHOT</version> </parent><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.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency></dependencies>
在其入口applicaton类加上注解@EnableZuulProxy,开启zuul的功能:
@SpringBootApplication @EnableZuulProxy @EnableEurekaClient @EnableDiscoveryClient public class Demo5Application {public static void main(String[] args) {SpringApplication.run(Demo5Application.class, args);} }
注解解析:
@EnableZuulProxy
如果使用注解@EnableZuulProxy,那么除上述过滤器之外,Spring Cloud还会增加以下过滤器:
1、pre类型过滤器
PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。
2、route类型过滤器
(1) RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get("serviceId")中。该过滤器可使用不同的HTTP客户端,例如
Apache HttpClient:默认的HTTP客户端
SquareupOkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true。
Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。
(2) SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost()中。
yml配置:
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/ server:port: 8766 spring:application:name: service-zuul zuul:routes:api-a:path: /api-a/**serviceId: service-ribbonapi-b:path: /api-b/**serviceId: service-feign
首先指定服务注册中心的地址为http://localhost:8761/eureka/,服务的端口为8766,服务名为service-zuul;以/api-a/ 开头的请求都转发给service-ribbon服务;以/api-b/开头的请求都转发给service-feign服务;
把五个项目都跑起来:
打开浏览器分别访问:
http://localhost:8766/api-a/hi?name=fsdm ;
http://localhost:876/api-b/hi?name=fsdm ;
浏览器显示:
这说明zuul起到了路由的作用
三、服务过滤
项目架构:
zuul不仅只是路由,并且还能过滤,做一些安全验证。继续改造工程;
添加过滤器类:
@Component public class MyFilter extends ZuulFilter {/*** filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:* pre:路由之前* routing:路由之时* post: 路由之后* error:发送错误调用*/@Overridepublic String filterType() {return "pre";}//过滤的顺序 @Overridepublic int filterOrder() {return 0;}//这里可以写逻辑判断,是否要过滤,本文true,永远过滤。 @Overridepublic boolean shouldFilter() {return true;}//过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。 @Overridepublic Object run() throws ZuulException {System.out.println("==============================================================");RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();System.out.println(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));Object accessToken = request.getParameter("token");if(accessToken == null) {System.out.println("token is empty");ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(401);try {ctx.getResponse().getWriter().write("token is empty");}catch (Exception e){}return null;}System.out.println("ok");return null;} }
访问:http://localhost:8766/api-a/hi?name=fsdm ;网页显示:
访问http://localhost:8766/api-a/hi?name=fsdm&token=22页面显示:
这里是一个非常简单的模拟验证,通过是否又token值来决定是否有权限访问
未完,待续。。。
转载于:https://www.cnblogs.com/lsy131479/p/9635075.html
玩转SpringCloud(F版本) 四.路由网关(zuul)相关推荐
- 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)
转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...
- 【SpringCloud】第五篇: 路由网关(zuul)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 企业级 SpringCloud 教程 (五)路由网关(zuul)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...
- SpringCloud实战(五)-路由网关(zuul)
本文是SpringCloud实战(五)-路由网关(zuul),若要关注前文,请点击传送门: SpringCloud实战(四)-断路器(Hystrix) 前文我们介绍了Hystrix断路器.在平常工作中 ...
- 第九章:路由网关(Zuul)的使用
2019独角兽企业重金招聘Python工程师标准>>> 第九章:路由网关(Zuul)的使用 前言 介绍完分布式配置中心,结合前面的文章.我们已经有了一个微服务的框架了,可以对外提供a ...
- springcloud 之 路由网关 zuul
话不多说,先上图(图是丑陋了点,大家别介意哈),这幅图是我根据公司现有的业务设计出来的一个简单的基于springcloud微服务架构图. 在springcloud微服务体系中,我们一般不对外直接暴露服 ...
- 第五篇:路由网关(zuul) zuul路由 服务过滤 (Finchley版本)V2.0_dev
前言: 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统. 在Spring C ...
- SpringCloud之路由网关zuul(五)
2019独角兽企业重金招聘Python工程师标准>>> 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础 ...
- SpringCloud教程- 路由网关Zuul (SpringCloud版本Greenwich.SR4)
文章目录 Zuul简介 创建zuul-gateway工程 服务过滤 代码地址:github-spring-cloud地址 Zuul简介 Zuul是NetFlix开源的微服务网关,它可以和Eureka. ...
- SpringCloud: 路由网关(zuul)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...
最新文章
- 为Windows mobile编写设计友好的控件[Writing designer friendly controls for Windows Mobile]
- Python将被加入高考科目?你怎么看?
- 用户体验至上:40亿美金的ClickUp重新整合生产力工具
- 包过滤防火墙和代理应用防火墙
- python mssql session_python的web框架webpy【session amp; cookie】五 - 莫激动 - ITeye博客
- java程序员 进阶_Java程序员进阶架构师的五个阶段,你到
- 【蓝桥杯单片机】独立按键和矩阵按键
- 乔丹LeCun李开复隔空对话:我们对智能一无所知;AI研究的12大趋势
- webpack配置信息说明
- python的ols_Python Statsmodels 统计包之 OLS 回归
- Coin3D三维可视化教程1
- VMware workstations pro16.23已经安装vmware tool,Ubuntu仍然无法复制粘贴
- 使用爱剪辑等软件制作视频的全套入门教程
- 无刷滑环全面分析大全
- java学习资料免费下载(持续更新ing)
- 【C语言】三子棋游戏详解
- 卫星电视的双本振,单本振及高频头相关知识普及
- Python3.6支付宝账单爬虫
- 毕业论文尾注和参考文献
- 卡内基梅隆计算机专业,卡内基梅隆大学计算机科学专业全面解析
热门文章
- 【转】Photoshop中快速复制的技巧有哪些
- EasyPoi如何使用注解导出,并且添加自增序号?
- 代码题(23)— 数组中的最长山脉
- office文件 vue 预览_OFFICE 文档转换为html在线预览
- nordic nFR52832 PCA10040 blinky例程分析
- qq邮箱foxmail imap服务器,开通IMAP服务 用Foxmail远程遥控QQ邮箱
- 金融壹账通拟7月4日香港上市:2年亏近30亿 市值蒸发超90%
- 平板电脑也可以学python吗?10 个Python 编辑器,,让编程更贴近生活~
- 米家摄像头显示服务器错误,米家摄像头云服务器
- The full stack trace of the root cause is available in the server logs.