微服务实战|微服务网关Zuul入门与实战

Zuul的api-gateway转发多个服务,静态资源访问 用Zuul作为api网关,转发到多个微服务,访问这些微服务中的静态资源 通过在zuul中为要访问的微服务的路径取别名 zuul转发到其他服务,静态资源的访问路径发生改变 由原来的本项目的 ip + 端口 + href路径 变为: zuul的ip+zuul的端口+href路径 zuul路由设置 server: # 服务端口号 port: 8001 # 设置路由映射 # zuul会... 阅读详情

网关的作用

微服务架构中,服务实例的地址可能经常会发生变化,所以我们不能直接将服务的地址暴露出来。如果每一个微服务都直接暴露接口,会导致一系列的问题,比如调用过于复杂,涉及到账户、权限不能统一处理等。另外基于高内聚低耦合的设计准则来讲,我们也应该将内部系统和外部系统做切割。

因此,这时就需要有一个独立的组件来处理外部的请求,这个组件就是服务网关。服务网关就是为了简化前端的调用逻辑,通常情况下也会实现相关的认证逻辑,根据外部不同的请求响应不同的数据,从而简化内外部系统之间调用的复杂度。
在这里插入图片描述
服务网关负责服务请求路由、组合及协议转换。客户端的所有请求都首先经过服务网关,然后由它将请求路由到合适的微服务。服务网关经常会通过调用多个微服务并合并结果来处理一个请求,它可以在系统外部与内部响应之间友好的转换。

本文将先着重介绍Zuul组件。

Spring Cloud 网关组件Zuul介绍

Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件。Zuul 接收所有外来请求,并将请求转发到对应的后端服务。作为一个前置服务,Zuul 旨在实现动态路由,监控,弹性和安全性等功能。

Zuul 提供了不同类型的 filter 用于处理请求,这些 filter 可以让我们实现以下功能:

  1. 权限控制和安全性:可以识别认证需要的信息和拒绝不满足条件的请求。
  2. 监控:与边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
  3. 动态路由:根据需要动态地路由请求到后台的不同集群。
  4. 压力测试:逐渐增加指向集群的流量,以了解性能。
  5. 负载均衡:为每一种负载类型分配对应容量,并弃用超出限定值的请求
  6. 静态资源处理:直接在 zuul 处理静态资源的响应,从而避免其转发到内部集群。

Zuul网关实战

之前的介绍中,我们启动了注册中心registry,dms服务,和app服务,请求时,直接调用了app服务的接口,app服务又调用了dms服务:

在这里插入图片描述

加上网关服务之后,就会变成如下:
在这里插入图片描述

接下来,我们创建zuul服务:

1、创建服务

创建子模块zuul,pom.xml引入eureka-client 和zuul的依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!-- feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!-- zuul路由 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

2、创建配置文件

server:
  port: 8004
spring:
  application:
    name: zuul

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
feign:
  hystrix:
    enabled: true
zuul:
  routes:
    app: #活动
      path: /app/** #配置请求URL的请求规则
      serviceId: app #指定Eureka注册中心中的服务id
    dms: #活动
      path: /dms/** #配置请求URL的请求规则
      serviceId: dms #指定Eureka注册中心中的服务id
logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'

3、创建Zuul过滤器

/**
 * @Author:公众号:程序员965
 * @create 2022-06-30
 **/
@Component
public class MyZuulFilter extends ZuulFilter {

//    pre :可以在请求被路由之前调用
//    route :在路由请求时候被调用
//    post :在route和error过滤器之后被调用
//    error :处理请求时发生错误时被调用
    @Override
    public String filterType() {
        return "pre";// 前置过滤器
    }

    //通过int值来定义过滤器的执行顺序,优先级为0,数字越大,优先级越低
    @Override
    public int filterOrder() {
        return 0;
    }

    //返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关
    @Override
    public boolean shouldFilter() {
        return true;//此处为true,说明需要过滤
    }

    //过滤器的具体逻辑。
    @Override
    public Object run() throws ZuulException {
        // 获取上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String accessToken = request.getParameter("accessToken");
        if (StringUtils.isEmpty(accessToken)) {
            //setSendZuulResponse(false)令zuul过滤该请求,不进行路由
            currentContext.setSendZuulResponse(false);
            //设置返回的错误码
            currentContext.setResponseStatusCode(401);
            currentContext.setResponseBody("AccessToken is null");
            return null;
        }
        System.out.println("获取到AccessToken为:"+accessToken);
        // 否则正常执行业务逻辑.....
        return null;
    }
}

4、编写启动类

注意增加@EnableZuulProxy注解

/**
 * @Author:公众号:程序员965
 * @create 2022-06-30
 **/
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }
}

5、启动验证

这个时候,我们将直接请求app的接口地址,改成网关zuul的地址和端口:http://localhost:8004/app/index

在这里插入图片描述

可以看到,请求中没有token访问授权认证失败!

总结

总结下网关的作用:

  1. 简化客户端调用的复杂度,统一处理外部请求。
  2. 数据的裁剪和聚合,根据不同的接口需求,对数据加工后对外提供接口
  3. 多平台的支持,对不同的客户端提供不同的网关支持。
  4. 遗留系统的微服务化改造,可以作为新老系统的中转组件。
  5. 统一处理调用过程中的安全、权限问题。
微服务实战微服务网关Zuul入门与实战 Zuul是Netflix公司开源的产品,被称为第一代网关,也是SpringCloud前几个版本默认使用的一款提供动态路由微服务网关组件。Zuul接收所有外来请求,并将请求转发到对应的后端服务。作为一个前置服务,Zuul旨在实现动态路由,监控,弹性和安全性等功能。权限控制和安全性可以识别认证需要的信息和拒绝不满足条件的请求。监控与边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。动态路由根据需要动态地路由请求到后台的不同集群。压力测试httpshttps。... 阅读详情

相关推荐

微服务架构之服务网关

微服务架构之服务网关 1 服务网关概念 网关是任何微服务架构的重要组成部分。有了它我们可以在一个独立的模块上方便的处理一些非业务逻辑,可以让微服务本身专注在自身特定的功能上,使得每个微服务的开发更容易和更快速。 1.1 为什么需要网关? 其实在我们的项目曾经还是单体应用的时候,虽然没有网关的概念,但是一般在项目中都会用到filter/过滤器之类的东西,filter的作用就是把项目中的一些非业务逻辑的功能抽离出来独立处理,避免与业务逻辑混在一起增加代码复杂度。比如鉴权认证功能、Session处理、安全检查、日

weixin_40055163的博客 824

微服务网关 Gateway

微服务网关

dingd1234的博客 6801

数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

VCS+Verdi单步调试

ic疾风传 1万+

SpringCloud微服务网关Gateway:gateway基本实现、断言工厂、过滤器工厂、浏览器同源策略、跨域问题解决方案

SpringCloud微服务网关Gateway

HakerDONG的博客 2366

从赛题到实战:一份面向高职“区块链技术应用”赛项的食品溯源系统全栈部署与运维指南

本文为高职院校学生备战“区块链技术应用”技能大赛提供了一份详实的食品溯源系统全栈部署与运维指南。内容涵盖从理解赛题业务逻辑、绘制技术蓝图,到搭建4节点FISCO BCOS联盟链、部署管理平台与智能合约,再到核心运维技能与前后端联调测试的完整流程,旨在帮助参赛者将赛题转化为可运行的实战项目,全面提升区块链全栈开发与运维能力。

weixin_29172201的博客 685

医疗影像处理实战:如何用Slicer和Mimics将.nii.gz文件转为.ply格式(附避坑指南)

本文详细介绍了利用3D Slicer和Materialise Mimics软件,将医学影像中常见的.nii.gz格式文件转换为通用三维网格.ply格式的完整实战流程。文章重点分享了从数据分割、DICOM序列导出到高质量网格生成的核心步骤与关键参数设置,并提供了针对常见问题的避坑指南,旨在帮助医学影像研究者和工程师高效完成从体数据到三维模型的关键转换。

weixin_28304023的博客 103

微服务网关

1 微服务网关的概述 不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微服务,增加了客户端的复杂性 存在跨域请求,在一定场景下处理相对复杂 认证复杂,每个服务都需要独立认证 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施 某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访

chinusyan的专栏 1万+

PLSQL Developer新手必看:如何避免安装过程中的常见坑

本文为PL/SQL Developer新手提供了详尽的安装与配置避坑指南。从版本选择、注册码使用、汉化包安装到Oracle客户端连接配置,逐一解析常见问题并提供解决方案,帮助开发者快速搭建稳定的PL/SQL开发环境,顺利开启Oracle数据库编程工作。

g9h0i1的博客 652

Spring Cloud微服务网关Zuul灰度发布入门实战

可以关注我的微信公众号,有更多的技术干货文章。

weixin_42008170的博客 1269

Matlab Robotics Toolbox实战:四自由度机械臂建模与仿真全流程(附代码)

本文详细介绍了使用Matlab Robotics Toolbox进行四自由度机械臂建模与仿真的全流程,包括DH参数定义、模型构建、可视化、运动学仿真及交互控制。通过实战案例和代码示例,帮助读者快速掌握机械臂建模技巧,提升机器人学习效率。

weixin_42538752的博客 415

嵌入式常用通信协议 #概述

嵌入式通信协议

AFK3060的博客 2117

Spring Cloud入门实战(五) Zuul--构建微服务网关

为什么微服务要使用网关 微服务的架构,属于比较细粒度的拆分,会根据业务拆分成很多个微服务,那么有可能一个用户下单,就需要 先调 用户微服务->商品微服务->支付微服务->订单微服务,这样才能完成一次购买商品的操作。如图。 这样的话,让客户端直接与各个微服务进行通信的话,会存在很多问题: 客户端多次请求不同的微服务,增加客户端的复杂程度。 存在跨域现象。 认证复杂,每个微服务都...

逆流而上的博客 7738

【深度学习】最强算法之:残差网络(ResNet)

一篇掌握深度学习算法之:残差网络

商务合作 | 面试培训 | 职场规划 ==>主页扫码 7837

微服务实战 微服务网关Zuul入门与实战_让服务请求全走网关

简化客户端调用的复杂度,统一处理外部请求。数据的裁剪和聚合,根据不同的接口需求,对数据加工后对外提供接口多平台的支持,对不同的客户端提供不同的网关支持。遗留系统的微服务化改造,可以作为新老系统的中转组件。统一处理调用过程中的安全、权限问题。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)一个人可以走的很快,但一群人才能走的更远!

m0_75012421的博客 456

079、镜头阴影校正(LSC)精讲:径向衰减模型、增益矩阵生成与产线标定技巧

《镜头阴影校正(LSC)实战精要》 本文从实际案例出发,深入解析镜头阴影校正的核心技术与产线应用。作者通过一个典型故障案例(0.05mm镜片偏移导致LSC失效)揭示了LSC不仅是数学问题,更是光学-机械-工艺耦合系统。 【关键技术点】 模型优化:提出"径向+切向"双分量模型替代传统cos⁴θ模型,采用5阶多项式拟合径向衰减,1阶线性补偿切向误差 增益矩阵生成:采用自适应网格技术,在边缘区域加密网格,结合中值滤波与高斯平滑消除噪声干扰 产线标定:强调光源均匀性校准(积分球vs平板光源)、坏点预处理、温度补偿等

zzfmlxs的博客 102

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring Cloud微服务网关Zuul过滤链和整合OAuth2+JWT入门实战

OAuth2是OAuth协议的第二个版本,是对授权认证比较成熟地面向资源的授权协议,在业界中广泛应用。出了定义了常用的用户名密码登录之后,还可以使用第三方一个用登录。例如在某些网站上可以使用QQ、微信、Github等进行登录。其主要流程如下:至于JWT则是一种使用JSON格式来规约Token和Session的协议。因为传统的认证方式中会产生一个凭证,比如Session会话是保存在服务端,然后依赖于Cookie返回给客户端,Session是有状态的。

weixin_42008170的博客 1094

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringCloud Finchley 实战入门(基于springBoot 2.0.3)【九 zuul 微服务网关配置】

网关介绍 API网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤。它除了要实现请求路由、 负载均衡、 校验过滤等功能之外,还需要更多能力,比如与服务治理框架的结合、请求转发时的熔断机制、服务的聚合等一系列高级功能。 入门例子 创建一个moudle,命名为eureka...

longzhanpeng的博客 2110

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

2024年大数据最新微服务实战 微服务网关Zuul入门与实战_让服务请求全走网关,大数据开发已死

Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件。Zuul 接收所有外来请求,并将请求转发到对应的后端服务。作为一个前置服务,Zuul 旨在实现动态路由,监控,弹性和安全性等功能。权限控制和安全性:可以识别认证需要的信息和拒绝不满足条件的请求。监控:与边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。动态路由:根据需要动态地路由请求到后台的不同集群。

2401_84616027的博客 402

2024年大数据最新微服务实战 微服务网关Zuul入门与实战_让服务请求全走网关(5),大牛整理

简化客户端调用的复杂度,统一处理外部请求。数据的裁剪和聚合,根据不同的接口需求,对数据加工后对外提供接口多平台的支持,对不同的客户端提供不同的网关支持。遗留系统的微服务化改造,可以作为新老系统的中转组件。统一处理调用过程中的安全、权限问题。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

2401_84592149的博客 317

2024年最全微服务实战 微服务网关Zuul入门与实战_让服务请求全走网关,2024年最新大数据开发性能优化面试

创建子模块zuul,pom.xml引入eureka-client 和zuul的依赖。

2401_84573042的博客 439
上一篇: 微服务实战|熔断器Hystrix初体验
下一篇: 微服务实战|微服务网关Gateway入门与实战
_时光煮雨
博客等级 码龄15年 3707粉丝 34原创
评论 49
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_时光煮雨

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值