微服务网关与配置中心

简介: 本课程学习Spring Cloud Gateway网关的实现与应用,掌握路由配置、过滤器使用、全局身份校验、Nacos统一配置管理及热更新等核心技能,实现微服务架构下的前后端联调与鉴权流程。

学习目标

  1. 能够说出用什么实现的网关以及实现了哪些功能
  2. 能够创建网关工程实现路由功能
  3. 能够使用网关内置过滤器StripPrefix
  4. 能够定义全局过滤器并测试通过
  5. 能够实现全局身份校验过滤器
  6. 能够在微服务实现用户身份拦截器
  7. 能够说出网关鉴权具体的实现步骤
  8. 能够实现商城项目前后端联调
  9. 能够将微服务配置文件在Nacos统一管理
  10. 能够说出微服务配置文件的加载顺序
  11. 能够将微服务配置文件抽取公共配置
  12. 能够说出Nacos配置热更新方案
    1 网关路由
    1.1.认识网关
    1.1.1 问题分析
    目前为止我们已将黑马商城单体项目重构为微服务架构,今天的目标是前后端联调,下边思考几个问题:
    1.1.1.1 前端面对多个后端入口
    项目采用单体架构时前端通过nginx负载均衡访问后端服务,如下图:
    同一个服务部署多份仅端口不同,且部署在不同地域(北上广深)的方式,一般称:水平复制、异地容灾

项目采用微服务架构时原来的黑马商城分成了购物车服务、交易服务、支付服务等多个服务,前端面对多个后端入口 ,如下图:

前端面对多个后端入口不方便前端开发,效率低下。仍然可以采用nginx去解决【注意不是最佳】,如下图:

在nginx中创建多个upstream ,例如:
http {
upstream item_services {
server 127.0.0.1:8081 weight=3; # 分配较高权重
server 127.0.0.1:8082 weight=2; # 分配中等权重
server 127.0.0.1:8083 weight=1; # 分配较低权重
}
upstream carts_services {
server 127.0.0.1:7081 weight=3; # 分配较高权重
server 127.0.0.1:7082 weight=2; # 分配中等权重
server 127.0.0.1:7083 weight=1; # 分配较低权重
}
....
server {
listen 80; # 监听 80 端口,也可以根据需要更改
server_name localhost; # 更改为你的域名或 IP 地址

    location /items/ {  # 这里可以根据需要调整路径前缀
        proxy_pass http://item_services;
    }
    location /carts/ {  # 这里可以根据需要调整路径前缀
        proxy_pass http://carts_services;
    }
    ....

}
1.1.1.2 用户身份校验放在哪?
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:每个微服务都需要编写身份校验、用户信息获取的接口,非常麻烦。
用户身份校验最好放在一个统一的地方,放在上图中nginx的位置上上最合适,那nginx的作用如下:
1.请求路由,根据请求路径将请求转发到不同的应用服务器。
2.负载均衡,通过负载均衡算法将请求转发到不同的应用服务器。
3.用户身份鉴权,校验用户身份及用户的权限。
1.1.2 认识网关
Nginx目前扮演的角色就是:网关,什么是网关?
顾明思议,网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。
我们现在要根据需求使用Java在网关实现路由转发和用户身份认证的功能:

  1. 根据请求Url路由到具体的微服务
  2. 校验用户的token,取出token中的用户信息。
  3. 从nacos中取出服务实例进行负载均衡。
    但 在nginx中进行java编程是非常困难的,所以我们需要一个使用java开发的网关。
    AI:java微服务网关
    ● Netflix Zuul:早期实现,目前已经淘汰
    ● Spring Cloud Gateway:基于Spring的WebFlux技术,完全支持响应式编程,吞吐能力更强
    课堂中我们以Spring Cloud Gateway为例来讲解,如下图:

前端请求网关根据请求路径路由到微服务,网关从nacos获取微服务实例地址将请求转发到具体的微服务实例上。生产环境中网关也是集群部署,在网关前边通过nginx进行负载均衡,如下图:

为什么这里需要Naocs?
答:网关怎么根据用户访问路径:http://baidu.com/carts/findAll,决定找到carts购物车服务呢?
此时就会用到服务注册与发现的知识点,而能帮我们实现这个功能的无疑nacos就可以做到。
1.1.3. 面试题
说说Spring Cloud五大组件?
你们项目网关用什么实现,实现了什么功能?
1.2. 实现网关路由
接下来,我们先看下如何利用网关实现请求路由。由于网关本身也是一个独立的微服务,因此也需要创建一个模块,大概步骤如下:
AI:Spring Cloud Gateway实现路由
● 创建网关微服务
● 引入Spring Cloud Gateway、NacosDiscovery依赖
● 编写启动类
● 配置网关路由
1.2.1. 创建网关工程
首先,我们要在hmall下创建一个新的module,命名为hm-gateway,作为网关微服务:

1.2.2 引入依赖

相关文章
|
1月前
|
负载均衡 容灾 JavaScript
Nginx反向代理容灾备份(手把手教你搭建高可用Web服务)
本文介绍如何通过Nginx反向代理实现容灾备份与高可用架构。利用upstream模块配置主备服务器,结合健康检查与自动故障转移,确保主服务宕机时无缝切换至备用服务器。图文详解参数设置、配置步骤及测试方法,并提供Keepalived、HTTPS等进阶优化建议,助小白快速搭建稳定可靠的Web系统。
|
2月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战应用,涵盖配置管理、热更新、共享配置及优先级规则,并演示集群搭建与高可用部署,提升微服务架构下配置的动态管理能力。
|
1月前
|
运维 Ubuntu 应用服务中间件
Nginx日志文件归档(手把手教你自动压缩和轮转日志)
本文介绍如何使用Linux自带的logrotate工具实现Nginx访问日志与错误日志的自动轮转、压缩与归档。通过简单配置,可避免日志文件过大占用磁盘空间,提升系统稳定性。涵盖配置步骤、参数详解、测试方法及常见问题解决方案,适合运维新手快速上手,保障服务器长期稳定运行。
|
2月前
|
NoSQL Java MongoDB
ongoDB实战演练
本项目实现头条文章评论功能,基于SpringDataMongoDB操作MongoDB数据库,支持评论的增删改查、按文章ID查询及点赞功能。构建article微服务模块,设计Comment实体类,封装评论信息,集成mongodb-driver驱动,完成持久化操作。
|
23天前
|
安全 应用服务中间件 Linux
HTTPS 优化完整方案解析
本文详解HTTPS性能优化全方案,从原理到实操,涵盖硬件加速(AES-NI)、软件升级(内核与OpenSSL)及协议层优化(TLS 1.3、ECDSA、会话复用等),配合Nginx配置模板与验证方法,助你实现安全与速度双提升,显著降低访问延迟。
645 2
|
2月前
|
存储 负载均衡 算法
|
2月前
|
负载均衡 Java Nacos
Gateway服务网关
网关是微服务架构的统一入口,实现请求路由、权限控制与限流。基于Spring Cloud Gateway可实现高性能响应式编程,通过断言和过滤器灵活控制流量,保障系统稳定。
|
2月前
|
存储 JSON NoSQL
MongoDB常用命令
本案例介绍如何使用MongoDB存储文章评论数据。通过`use articledb`创建并切换数据库,利用`db.createCollection()`显式或插入文档时隐式创建集合。文档以BSON格式存储,使用`insert()`方法添加数据,如评论内容、用户信息等。支持查看数据库与集合、删除操作,并遵循命名规范。适用于掌握MongoDB基本CRUD操作。(238字)
|
2月前
|
Dubbo Java 应用服务中间件
Feign远程调用
本章介绍Feign如何优雅替代RestTemplate实现HTTP跨服务调用。通过引入Feign,结合注解声明远程接口,避免服务地址硬编码,提升代码可读性与维护性,并支持自定义日志、编码等配置,实现高效、简洁的微服务通信方案。
|
2月前
|
负载均衡 算法 架构师
Ribbon负载均衡
本文深入解析Spring Cloud中@LoadBalanced注解的作用,详解Ribbon如何在客户端实现负载均衡,涵盖负载均衡原理、算法分类、硬件与软件方案对比,并介绍Ribbon自定义策略及饥饿加载优化。通过源码流程与配置示例,帮助读者全面掌握Ribbon核心机制,为后续学习Nacos、Gateway等负载均衡实现打下基础。(238字)