一、网关基本概念

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 {...
}

SpringCloud+Vue在线教育网站——整合Gateway网关相关推荐

  1. Springboot+MySQL+VUE实现的在线教育网站源码+视频教程(Springboot微服务架构)

    下载地址:https://download.csdn.net/download/BSDKT/85347133?spm=1001.2014.3001.5503 项目介绍: Springboot+MySQ ...

  2. saas 自定义域名_用WordPress搭建独立“在线教育网站”需要多少钱?比SAAS如何

    大家好,关于"在线教育"平台选择,写了三篇文章,这是第三集.这集和各位分享一下用WordPress搭建"在线教育网站"需要的清单和费用,以及这种方式和SAAS在 ...

  3. Java微服务——SpringCloud实战篇2:整合Gateway、Config、Bus

    Java微服务--SpringCloud实战篇2:整合Gateway.Config.Bus 如果小伙伴在阅读下列内容时,对于编写SpringCloud项目是零基础,那么请先阅读小编的另一篇博文:&qu ...

  4. 在线教育网站如何更好的实现视频安全视频保护?

    在线教育网站的视频安全与视频文件加密要如何做?国内在线教育越来越火,但很多在线教育网站都面监一个大问题,收费课程被下载传播,有的甚至被拿到某宝上几块钱出售. 那么在线教育网站应该如何做,才可以更好的保 ...

  5. 10多个LearnDash示例和演示:从这些在线教育网站获得灵感!

    正在寻找真实的LearnDash示例来激发您自己的电子学习网站的灵感? LearnDash 是最受欢迎的 WordPress LMS 插件之一,约翰霍普金斯大学和 Collibra 等大型组织以及 Y ...

  6. 只需几次点击即可创建一个Astra和LearnDash在线教育网站 – 简单快捷!

    Astra为不喜欢从头开始设计网站的任何人提供了一个巨大的入门模板库. 这些网站是使用各种页面构建器制作的,例如 Elementor.Beaver Builder.Brizy 以及 Gutenberg ...

  7. 目前在线教育网站都有哪些分类?

    一.B2B2C平台型:在线教育主流方式,通过和机构合作,个人老师入驻形式,向学习者提供在线和点播的网络授课资源.典型的有:网易云课堂,传课网,YY教育,多贝,51CTO,以及各种公益的公开课等. B2 ...

  8. 在线教育网站源码教学视频加速的解决方案

    互联网高速发展的今天,在线教育作为一种新兴教育方式,引得越来越多的教育培训机构参与其中,决定找专业服务商选择优质的在线教育网站源码,搭建出属于教育培训机构自己的在线教育网站.从服务商的角度来看,所涉及 ...

  9. 如何利用教育网站源码成功搭建在线教育网站

    如今是一个信息化时代,人们都想接受各种各样的教育,在线教育也就因此发展了起来,并且逐渐成为了一种趋势.而成熟的在线教育网站皆是由高质量的教育网站源码搭建而成的.如何利用教育网站源码成功搭建在线教育网站 ...

最新文章

  1. git restore用法
  2. linux下使用find xargs grep查找文件及文件内容
  3. python输入学号返回成绩_Python模拟登陆正方教务系统并抓取成绩单
  4. chmod 文件夹及子文件夹_了解linux文件属性之chgrp,chown,chmod
  5. 第一个,net core项目,.net core入门介绍来了
  6. (转) Spring读书笔记-----Spring的Bean之配置依赖
  7. iOS开发之算法加密md5,sha1,AES,base64
  8. 区块链游戏《TmoLand明日世界》又叒叕更新了
  9. flow.php 漏洞,php – 使用Apache的Flowplayer安全流
  10. [转]考古学家完颜晓炜——人类曾经真…
  11. c语言极限,C语言问题合集
  12. 关于VA过期的解决办法
  13. Web安全之常见面试题总结
  14. 排序算法--快排的优化
  15. java代码实现排序二叉树
  16. 2022网络搭建国赛题交换机安全配置
  17. Vue.js的组件化开发
  18. mysql sql计算经纬度
  19. 电化学工作站的原理与应用
  20. 微信小程序万能模板(tabBar\openid\授权登录\云开发之一个云函数实现云数据库增删查改!)

热门文章

  1. LeetCode-按顺序刷题备注1-50
  2. 电脑花屏是屏幕坏了吗_电脑花屏时好时坏怎么回事 电脑花屏时好时坏如何彻底解决...
  3. excel数据整理:合并计算快速查看人员变动
  4. 深夜调试某浏览器内存损坏的小记录
  5. CSON+CJSON,解析json数据更优雅?
  6. Redis(十) 布隆过滤器
  7. extjs gridPanel columnModel renderer笔记
  8. 浪潮服务器NF5468M6风扇噪声太大怎么设置?(设置风扇转速)
  9. Gson 解析数组、集合
  10. 一文简述用php实现爬虫(下载英雄联盟所有英雄图片)