本篇文章基于:

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)相关推荐

  1. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)

    转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...

  2. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  3. 企业级 SpringCloud 教程 (五)路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  4. SpringCloud实战(五)-路由网关(zuul)

    本文是SpringCloud实战(五)-路由网关(zuul),若要关注前文,请点击传送门: SpringCloud实战(四)-断路器(Hystrix) 前文我们介绍了Hystrix断路器.在平常工作中 ...

  5. 第九章:路由网关(Zuul)的使用

    2019独角兽企业重金招聘Python工程师标准>>> 第九章:路由网关(Zuul)的使用 前言 介绍完分布式配置中心,结合前面的文章.我们已经有了一个微服务的框架了,可以对外提供a ...

  6. springcloud 之 路由网关 zuul

    话不多说,先上图(图是丑陋了点,大家别介意哈),这幅图是我根据公司现有的业务设计出来的一个简单的基于springcloud微服务架构图. 在springcloud微服务体系中,我们一般不对外直接暴露服 ...

  7. 第五篇:路由网关(zuul) zuul路由 服务过滤 (Finchley版本)V2.0_dev

    前言: 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统. 在Spring C ...

  8. SpringCloud之路由网关zuul(五)

    2019独角兽企业重金招聘Python工程师标准>>> 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础 ...

  9. SpringCloud教程- 路由网关Zuul (SpringCloud版本Greenwich.SR4)

    文章目录 Zuul简介 创建zuul-gateway工程 服务过滤 代码地址:github-spring-cloud地址 Zuul简介 Zuul是NetFlix开源的微服务网关,它可以和Eureka. ...

  10. SpringCloud: 路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

最新文章

  1. 为Windows mobile编写设计友好的控件[Writing designer friendly controls for Windows Mobile]
  2. Python将被加入高考科目?你怎么看?
  3. 用户体验至上:40亿美金的ClickUp重新整合生产力工具
  4. 包过滤防火墙和代理应用防火墙
  5. python mssql session_python的web框架webpy【session amp; cookie】五 - 莫激动 - ITeye博客
  6. java程序员 进阶_Java程序员进阶架构师的五个阶段,你到
  7. 【蓝桥杯单片机】独立按键和矩阵按键
  8. 乔丹LeCun李开复隔空对话:我们对智能一无所知;AI研究的12大趋势
  9. webpack配置信息说明
  10. python的ols_Python Statsmodels 统计包之 OLS 回归
  11. Coin3D三维可视化教程1
  12. VMware workstations pro16.23已经安装vmware tool,Ubuntu仍然无法复制粘贴
  13. 使用爱剪辑等软件制作视频的全套入门教程
  14. 无刷滑环全面分析大全
  15. java学习资料免费下载(持续更新ing)
  16. 【C语言】三子棋游戏详解
  17. 卫星电视的双本振,单本振及高频头相关知识普及
  18. Python3.6支付宝账单爬虫
  19. 毕业论文尾注和参考文献
  20. 卡内基梅隆计算机专业,卡内基梅隆大学计算机科学专业全面解析

热门文章

  1. 【转】Photoshop中快速复制的技巧有哪些
  2. EasyPoi如何使用注解导出,并且添加自增序号?
  3. 代码题(23)— 数组中的最长山脉
  4. office文件 vue 预览_OFFICE 文档转换为html在线预览
  5. nordic nFR52832 PCA10040 blinky例程分析
  6. qq邮箱foxmail imap服务器,开通IMAP服务 用Foxmail远程遥控QQ邮箱
  7. 金融壹账通拟7月4日香港上市:2年亏近30亿 市值蒸发超90%
  8. 平板电脑也可以学python吗?10 个Python 编辑器,,让编程更贴近生活~
  9. 米家摄像头显示服务器错误,米家摄像头云服务器
  10. The full stack trace of the root cause is available in the server logs.