SpringCloud(12):Zuul路由网关
创始人
2024-05-14 00:07:10
0

1 为什么需要服务网关

在分布式系统系统中,有商品、订单、用户、广告、支付等等一大批的服务,前端怎么调用呢?和每个服务一个个打交道?这显然是不可能的,这就需要有一个角色充当所有请求的入口,这个角色就是服务网关(API gateway)。

2 客户端直接与微服务通讯的问题

  1. 客户端会多次请求不同的微服务,增加了客户端的复杂性。
  2. 存在跨域请求,在一定场景下处理相对复杂。
  3. 认证复杂,每个服务都需要独立认证。
  4. 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通讯,那么重构将会很难实施。

3 网关的优点

  1. 易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。
  2. 易于认证。可在微服务网关上进行认证。然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
  3. 减少了客户端与各个微服务之间的交互次数。

为了解决上面这些问题,我们需要将权限控制这样的东西从我们的服务单元中抽离出去,而最适合这些逻辑的地方就是处于对外访问最前端的地方,我们需要一个更强大一些的均衡负载器,它就是本文将来介绍的:服务网关。

4 什么是网关?

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路 由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflflix 中的 Zuul 就担任了这样的一个角色,为 微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

5 使用zuul

5.1 新建zuul的module工程

5.2 新建pom文件

        org.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.cloudspring-cloud-starter-netflix-zuul

5.3 application.yml配置文件

eureka:client:serviceUrl:defaultZone: http://localhost:8888/eureka/
server:port: 9000
spring:application:name: study-zuul
zuul:routes:#路由名称,随意命名api-order:path: /api-order/**serviceId: study-userapi-user:path: /api-user/**serviceId: study-user

5.4 启动类

package com.study;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication
// 开启zuul功能
@EnableZuulProxy
@EnableEurekaClient
public class ZuulApp {public static void main(String[] args) {SpringApplication.run(ZuulApp.class, args);}
}

5.5测试路由访问

直接访问该端口结果如下:

通过路由网关访问,和上面结果一样

5.6 配置统一前缀访问

zuul:routes:#路由名称,随意命名api-order:path: /api-order/**serviceId: study-userapi-user:path: /api-user/**serviceId: study-user#前缀访问prefix: /study

添加统一前缀以后之前访问地址:http://localhost:9000/api-user/user/3

需要增加前缀才能访问,如下:

http://localhost:9000/study/api-user/user/3

5.7 忽略服务名serviceId访问

zuul:routes:#路由名称,随意命名api-order:path: /api-order/**serviceId: study-userapi-user:path: /api-user/**serviceId: study-user#忽略服务名serviceId访问ignored-services: "*"

添加ignored-services: "*"以后,之前直接通过服务名访问的端口将无法直接访问,必须通过路由访问。

5.8 配url绑定映射

zuul:routes:testurl:url: http://www.baidu.compath: /testurl/**

添加以后只要访问http://地址/testurl/**的将直接跳转到http://www.baidu.com。

testurl可以自己设置名称。

5.9 配置URL映射负载

ribbon:eureka:enabled: false
#Ribbon请求的微服务serviceId
study-user:ribbon:listOfServers: http://www.huya.com,http://www.douyu.com
zuul:routes:testurl:serviceId: study-userpath: /testurl/**

访问/testurl/**,会自动跳转http://www.huya.com或者http://www.douyu.com根据负载均衡来进行。

如http://localhost:9000/testurl/

6 zuul过滤器

Zuul本身是一系列过滤器的集成,那么他当然也就提供了自定义过滤器的功能,zuul提供了四种过滤器:前置过滤器,路由过滤器,错误过滤器,简单过滤器,实现起来也十分简单,只需要编写一个类去实现zuul提供的接口。

使用zuul过滤器

package com.study.Filter;import com.netflix.zuul.ZuulFilter;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;@Component
public class Filter1 extends ZuulFilter {/*** 类型包含 pre post route error* pre 代表在路由代理之前执行* route 代表代理的时候执行* error 代表出现错的时候执行* post 代表在route 或者是 error 执行完成后执行*/@Overridepublic String filterType() {// 路由之前(前置过滤器)return FilterConstants.PRE_TYPE;}@Overridepublic int filterOrder() {// 优先级,数字越大,优先级越低return 2;}@Overridepublic boolean shouldFilter() {// 是否执行该过滤器,true代表需要过滤return true;}@Overridepublic Object run() {System.out.println("Filter1 run");return null;}
}

设置两个过滤器,一个前置,一个后置,查看运行结果。

 

相关内容

热门资讯

原生安卓系统怎样升级,从基础到... 你有没有发现,你的安卓手机用久了,有时候就像老牛拉车一样,慢吞吞的?别急,今天就来给你支个招,让你的...
安卓13系统怎么开发,开发者的... 你有没有听说安卓13系统已经发布了?这可是个大新闻呢!作为一个热衷于手机开发的小伙伴,你是不是也跃跃...
安卓q系统镜像下载,轻松升级体... 你有没有听说安卓Q系统已经发布了?这可是安卓家族里的一大亮点呢!今天,我就要来给你详细介绍一下安卓Q...
安卓系统色彩校正软件,打造个性... 你有没有发现,手机屏幕的色彩有时候会让人感觉不太对劲?有时候,画面看起来有点灰蒙蒙的,有时候又太艳丽...
苹果能否下个安卓系统,开启新篇... 你有没有想过,苹果的iOS系统会不会有一天突然宣布,它要拥抱安卓的大家庭呢?想象iPhone和iPa...
树莓派 装 安卓系统,轻松安装... 你有没有想过,用树莓派装上安卓系统,那会是怎样一番景象呢?想象一个迷你电脑,竟然能运行起我们日常使用...
安卓系统怎么打印小票,安卓系统... 你是不是也遇到了这样的烦恼:手机里存了好多重要的小票,但是想打印出来保存或者报销,却发现安卓系统里的...
安卓10安装系统应用,轻松上手... 你有没有发现,你的安卓手机最近是不是有点儿“慢吞吞”的?别急,别急,今天就来给你支个招——升级安卓1...
美国不提安卓系统华为,迈向自主... 华为与美国:一场关于技术、市场与政策的较量在当今这个数字化的世界里,智能手机已经成为我们生活中不可或...
安卓系统怎么打开ppt,选择文... 你有没有遇到过这种情况:手里拿着安卓手机,突然需要打开一个PPT文件,却怎么也找不到方法?别急,今天...
谷歌退回到安卓系统,探索创新未... 你知道吗?最近科技圈可是炸开了锅,谷歌竟然宣布要退回到安卓系统!这可不是一个简单的决定,背后肯定有着...
安卓系统待机耗电多少,深度解析... 你有没有发现,手机电量总是不经用?尤其是安卓系统,有时候明明没怎么用,电量就“嗖”的一下子就下去了。...
小米主题安卓原生系统,安卓原生... 亲爱的手机控们,你是否曾为手机界面单调乏味而烦恼?想要给手机换换“衣服”,让它焕然一新?那就得聊聊小...
voyov1安卓系统,探索创新... 你有没有发现,最近你的手机是不是变得越来越流畅了?没错,我要说的就是那个让手机焕发青春的Vivo V...
电脑刷安卓tv系统,轻松打造智... 你有没有想过,家里的安卓电视突然变得卡顿,反应迟钝,是不是时候给它来个“大保健”了?没错,今天就要来...
安卓系统即将要收费,未来手机应... 你知道吗?最近有个大消息在科技圈里炸开了锅,那就是安卓系统可能要开始收费了!这可不是开玩笑的,这可是...
雷凌车载安卓系统,智能出行新体... 你有没有发现,现在的汽车越来越智能了?这不,我最近就体验了一把雷凌车载安卓系统的魅力。它就像一个聪明...
怎样拍照好看安卓系统,轻松拍出... 拍照好看,安卓系统也能轻松搞定!在这个看脸的时代,拍照已经成为每个人生活中不可或缺的一部分。无论是记...
安卓车机系统音频,安卓车机系统... 你有没有发现,现在越来越多的汽车都开始搭载智能车机系统了?这不,咱们就来聊聊安卓车机系统在音频方面的...
老苹果手机安卓系统,兼容与创新... 你手里那台老苹果手机,是不是已经陪你走过了不少风风雨雨?现在,它竟然还能装上安卓系统?这可不是天方夜...