SpringCloud+Vue在线教育网站——整合Gateway网关_getway-程序员宅基地

技术标签: # SpringCloud+Vue在线教育项目(全栈)  spring  spring boot  java  网关  

一、网关基本概念

1、API网关介绍

API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:

(1)客户端会多次请求不同的微服务,增加了客户端的复杂性。

(2)存在跨域请求,在一定场景下处理相对复杂。

(3)认证复杂,每个服务都需要独立认证。

(4)难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。

(5)某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。

以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性

2、Spring Cloud Gateway

Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。

在这里插入图片描述

3、Spring Cloud Gateway核心概念

网关提供API全托管服务,丰富的API管理功能,辅助企业管理大规模的API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等贡呢。一般来说网关对外暴露的URL或者接口信息,我们统称为路由信息。如果研发过网关中间件或者使用过Zuul的人,会知道网关的核心是Filter以及Filter Chain(Filter责任链)。Sprig Cloud Gateway也具有路由和Filter的概念。下面介绍一下Spring Cloud Gateway中几个重要的概念。

(1)路由。路由是网关最基础的部分,路由信息有一个ID、一个目的URL、一组断言和一组Filter组成。如果断言路由为真,则说明请求的URL和配置匹配

(2)断言。Java8中的断言函数Spring Cloud Gateway中的断言函数输入类型是Spring5.0框架中的ServerWebExchange。Spring Cloud Gateway中的断言函数允许开发者去定义匹配来自于http request中的任何信息,比如请求头和参数等。

(3)过滤器。一个标准的Spring webFilter。Spring cloud gateway中的filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理
在这里插入图片描述

如上图所示,Spring cloud Gateway发出请求。然后再由Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway web handler。Handler再通过指定的过滤器链将请求发送到我们实际的服务执行业务逻辑,然后返回。

二、实战

1 pom.xml

	<dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common_utils</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>

        <!--服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

2 application.properties

# 服务端口
server.port=8200
# 服务名
spring.application.name=service-gateway

# 环境设置:dev、test、prod
spring.profiles.active=dev

# Nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

# 使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true

#设置路由id
spring.cloud.gateway.routes[0].id=service-acl
#设置路由的uri   lb://nacos注册服务名称
spring.cloud.gateway.routes[0].uri=lb://service-acl
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/acl/**

#配置service-edu服务
spring.cloud.gateway.routes[1].id=service-edu
spring.cloud.gateway.routes[1].uri=lb://service-edu
spring.cloud.gateway.routes[1].predicates= Path=/eduservice/**

#配置service-edu服务
spring.cloud.gateway.routes[2].id=service-msm
spring.cloud.gateway.routes[2].uri=lb://service-msm
spring.cloud.gateway.routes[2].predicates= Path=/edumsm/**

3 启动类

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
public class GatewayApplication {
    

    public static void main(String[] args) {
    
        SpringApplication.run(GatewayApplication.class, args);
    }
}

4 跨域插件

@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("");
config.addAllowedOrigin("
");
config.addAllowedHeader("*");

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
    source.registerCorsConfiguration("/**", config);

    return new CorsWebFilter(source);
}

}

5 测试

前提:启动nacos注册服务
启动eduservice和gateway模块
在这里插入图片描述
报错信息
在这里插入图片描述
原因是gateway网关配置了跨域插件,而之前写的controller都加上了@CrossOrign注解,重复跨域必然报错。

解决方法是注释掉跨域插件的@Configuration注解或者把原来的controller的跨域注解都注释掉。

//@Configuration
public class CorsConfig {
    
...
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46275020/article/details/106599229

智能推荐

飞行管理数学建模论文_飞机的安全飞行管理调度问题1995年csdn-程序员宅基地

文章浏览阅读6.7k次,点赞13次,收藏95次。飞行管理问题建模目录(1)摘要(2)问题重述(3)问题分析(4)模型假设(5)符号说明(6)模型的建立与求解(7) 模型的缺点与改进方向摘要对飞行区域内的飞机,通过调整飞机飞行的角度且飞机调整的幅度要尽量小来避免飞机相撞的的问题,本文先将区域内任意两架飞机在区域内飞行时不相撞的条件转化成关于飞机在飞行区域内关于飞行时间的非线性约束条件,即任意两架飞机在未飞出区域的时间里,..._飞机的安全飞行管理调度问题1995年csdn

大作业毕设系列基于matlab的直方图优化的图像去雾系统_基于matlab的图像去雾系统毕业设计-程序员宅基地

文章浏览阅读377次。雾霾天气往往会给人类的生产和生活带来极大不便,也大大增加了交通事故的发生概率。一般而言,在恶劣天气(如雾天、雨天等)条件下,户外景物图像的对比度和颜色会被改变或退化,图像中蕴含的许多特征也会被覆盖或模糊,这会导致某些视觉系统(如电子卡口、门禁监控等)无法正常工作。因此,从在雾霾天气下采集的退化图像中复原和增强景物的细节信息具有重要的现实意义。数字图像处理技术已被广泛应用于科学和工程领域,如地形分类系统、户外监控系统、自动导航系统等。为了保证视觉系统全天候正常工作,就必须使视觉系统适应各种天气状况。_基于matlab的图像去雾系统毕业设计

IDEA Help–>Edit Custom VM Options 修改后导致打不开进行复原-程序员宅基地

文章浏览阅读1.2k次。IDEA Help–>Edit Custom VM Options 修改后的坑_edit custom vm options

LVGL之GUI GUIder使用教程_lvgl界面编辑器-程序员宅基地

文章浏览阅读3.6k次,点赞7次,收藏28次。lvgl是一个免费的开放源代码图形库,提供创建具有易于使用的图形元素,再配合NXP提供的GUI-Guider软件,极大简化了嵌入式系统UI的设计。GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。单击按钮,您可以在模拟环境中运行应用或将其导出到目标项目。_lvgl界面编辑器

Unity Editor 不同枚举显示不同属性_unity 面板中不同枚举选择不同属性-程序员宅基地

文章浏览阅读623次。1_unity 面板中不同枚举选择不同属性

基于ffmpeg的MP4文件解封装_linux ffmpegmp4解封装-程序员宅基地

文章浏览阅读944次,点赞26次,收藏14次。基于ffmpeg的MP4文件解封装_linux ffmpegmp4解封装

随便推点

黑马程序员机器学习Day2学习笔记_深度学习与cv入门 黑马程序员-程序员宅基地

文章浏览阅读590次,点赞2次,收藏11次。一.转换器和预估器二. KNN算法网格搜索和交叉验证KNN案例:Facebook预测签到位置朴素贝叶斯联合概率、条件概率与相互独立决策树信息熵回顾传统机器学习算法流程:1.获取数据2.数据处理3.特征工程4.机器学习算法训练5.模型评估总结本章内容: 1.KNN算法用于小型数据集的分类2.朴素贝叶斯用于特征于特征之间关系不强的算法,比如文本的分类3.决策树算法用于大型的数据集中一.转换器和预估器Day1的时候我们学习了获取数据,特征工程。(Day1中我们并没有没有使用到数据处理,因为._深度学习与cv入门 黑马程序员

极客公园对话 Zilliz 星爵:大模型时代,需要新的「存储基建」-程序员宅基地

文章浏览阅读563次。大模型在以「日更」进展的同时,不知不觉也带来一股焦虑情绪:估值 130 亿美元的 AI 写作工具 Grammarly 在 ChatGPT 发布后网站用户直线下降;AI 聊天机器人独角兽公司 Character.AI 的自建大模型在 ChatGPT 进步之下,被质疑能否形成足够的竞争壁垒 …ChatGPT Plugins 插件发布之后,更多创业者开始担忧大模型的技术进步会把自己卷入「打击射程」,瞬时抹掉自己所在领域的技术积累和优势。

桌面被关闭,如何在任务管理器中打开桌面?_任务管理器打开桌面-程序员宅基地

文章浏览阅读3.8w次,点赞15次,收藏9次。explorer.exe就是windows系统的资源管理器主程序,也是桌面显示程序。如果要在任务管理器中打开桌面方法如下:1、打开任务管理器。2、点击菜单栏文件。3、新建任务,然后输入explorer按确定即可。..._任务管理器打开桌面

虚拟化 (Hypervisor) 技术详解-程序员宅基地

文章浏览阅读1.5k次,点赞34次,收藏24次。随着 ICT 技术的发展,单 SOC 算力可以承担更多业务,网络带宽拓展及低时延、区分服务等特性使得业务部署、功能分配更加灵活,比如 : 感知、融合、规划、控制、执行可分离解耦,汽车业务功能可分可合、可软件定义。电子电气架构从分布式架构到域集中式架构,再到中央集中式架构转变,分散的 ECU功能集成到域控制器甚至车载中央计算机,这就是多域融合。汽车电子底层硬件不再是由单一芯片提供简单的逻辑计算,而是需要复杂的多核 SoC 芯片提供更为复杂控制逻辑以及强大的算力支持。但是多域业务具有不同的技术需求,在域融合的同_hypervisor

html margin不居中,html中使用margin:0 auto整个页面不居中的解决方法分享-程序员宅基地

文章浏览阅读460次。今天写个jsp页面,乍么调来调去123xxx 这个属怎么弄都不能让页面居中展示,而且其它样式也出现莫名其妙的问题后来找这个这个问题的解决方案:原来是L-Blog默认没有在HTML前加上DTD,于是IE就以HTML而不是XHTML来解释文档.问题并不在CSS而在XHTML网页本身.需要加上这样的代码才能使得上述设置有效果:复制代码代码如下:-//W3C//DTD XHTML 1.0 Transiti..._html导入jsp不居中

【学习笔记】Esp32 Arduino 串口中断函数 缓冲区修改_arduino setrxfifofull-程序员宅基地

文章浏览阅读3.3k次,点赞8次,收藏32次。Esp32在Arduino开发环境下的串口中断实现和串口接收大数据的处理办法(修改缓冲区大小)_arduino setrxfifofull