在spring cloud netflix时使用zuul作为官网,但是随着zuul2.0的多次跳票和getway异军突起。getway已经是一款主流的产品了,同时springcloud alibaba官网的推荐网关也是getway,所以在选型时不需要犹豫。干就完了。同时getway使用了webflux,较第一代网关更优秀。

1.为什么使用网关

使用网关后,对于系统相当有了一个统一的入口,例如你有100个微服务系统,现在只需要对外暴露网关的地址即可。同时所有的请求都是通过网关的分发,所以很方便的在网关上对请求拦截,重而实现反向代理,鉴权,流量控制,熔断,日志监控等。

2.实现

getway基础实现很简单。鉴权等功能会在以后章节中发布。

1.添加pom.xml

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
复制代码

注意:getway使用的是webflux,不要引入spring-boot-starter-web

2.修改启动类

@EnableDiscoveryClient
@SpringBootApplication
public class GetwayApplication {public static void main(String[] args) {//去除nacos日志System.setProperty("nacos.logging.default.config.enabled", "false");SpringApplication.run(GetwayApplication.class, args);}}
复制代码

3.bootstrap.yml

getway也需要注册到nacos中。也需要将namespace和group对应。

server:port: 6001
spring:application:name: gateway-servercloud:nacos:discovery:# 服务注册地址server-addr: 192.168.xx.xx:8848#命名空间namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0#分组group: xxxconfig:# 配置中心地址server-addr: 192.168.xx.xx:8848# 配置文件格式file-extension: yml#命名空间namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0#分组group: xxxgateway:routes:# 路由标识(id:标识,具有唯一性) - id: auth# 目标服务地址(uri:地址,请求转发后的地址) 此处是nacos中服务名称uri: lb://auth-server# 路由条件(predicates:断言,匹配 HTTP 请求内容)predicates:## 当路径为/auth/xx/xx的请求都会转发到auth-server (也就是请求system-resource/auth/xx/xx)- Path=/auth/**- id: systemresourceuri: lb://system-resourcepredicates:- Path=/system/**
复制代码

楼主因为在小公司,所以只使用该规则就满足了业务要求,如果有其他规则使用,请自行百度,这里不具体介绍。

注意:

  1. getway只能获取同namespace和group中的服务。
  2. websocket接口与普通接口用以上配置就可以同时接受,不用额外配置路由。

3.配置oauth2的跨域

spring cloud ouath2 + getway跨域是有特别的配置的(与普通跨域不同)需要特别注意。

1.修改bootstrap.yml

spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:'[/**]':# 支持跨域访问的来源 也就是前台地址 可以配置多个 方法如下allowedOrigins:- "http://192.168.xx.xx:8080"- "http://192.168.xx.xx:8080"# 切记 allowCredentials 配置 为true时,allowedOrigins不能为 *allowCredentials: truemaxAge: 86400# 支持的方法 * 代表所有allowedMethods: "*"allowedHeaders: "*"exposedHeaders: "setToken"routes:# 路由标识(id:标识,具有唯一性)   截取请求- id: auth# 目标服务地址(uri:地址,请求转发后的地址)uri: lb://auth# 路由条件(predicates:断言,匹配 HTTP 请求内容)predicates:## 转发地址格式为 uri/archive,/str 部分会被下面的过滤器给截取掉- Path=/auth/**
复制代码

2.添加GatewayConfig

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.gateway.config.GlobalCorsProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;@Configuration
@EnableConfigurationProperties(GlobalCorsProperties.class)
public class GatewayConfig {/*** 配置全局解决cors跨域问题** @return*/@Order(Ordered.HIGHEST_PRECEDENCE)@RefreshScope@Beanpublic CorsWebFilter corsWebFilter(GlobalCorsProperties globalCorsProperties){UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());globalCorsProperties.getCorsConfigurations().forEach((k,v) -> source.registerCorsConfiguration(k, v));return new CorsWebFilter(source);}
}
复制代码

注意如果网关中添加了跨域配置,业务服务就不要添加了,否则就会报错!

getway极简落地入门相关推荐

  1. 合适学习人工智能的小白的一本书《极简AI入门:一本书读懂人工智能思维与应用》

    今天看了一本书<极简AI入门:一本书读懂人工智能思维与应用> 对于初学人工智能的小白来说,应该是非常容易看得懂的,书里罗列了人工智能需要学习的各个技能,可以把这本书当作学习人工智能的目录( ...

  2. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: github.com/hanzichi/un- 一.架构的实现 1.1:架构 (f ...

  3. Linux极简快速入门|Linux操作系统(四)

    Linux操作系统(四) 目录 Putty的使用 进程相关命令 Linux系统管理命令 passwd.shadow文件内容介绍 一.Putty的使用 putty是支持Telnet.SSH.rlogin ...

  4. PaperNotes(15)-图神经网络、PyG极简版入门笔记

    图神经网络概况 1.GNN,GCN,GE的区别 2.图卷积的通式--矩阵该如何作用 2.1实现1 2.2实现2 2.3实现3 3.PyTorch geometric 3.1 PyG内置数据集 3.1. ...

  5. c++ 使用nacos_想自学Maven?推荐Maven极简高速入门及常规使用

    [Java实战技术]原创,专注分享Java基础原理分析.实战技术.微服务架构.分布式系统构建,诚邀点赞关注! 前言 笔者的工作经历中使用过Ant.Maven和Gradle,如果让笔者选择,笔者会首选G ...

  6. dsl mysql_极简Querydsl入门

    1 数据库准备 使用MySQL数据库. 1.1 创建名为learnsql的数据库 建库语句 create datebase learnsql; 使用刚刚创建的learnsql数据库 use learn ...

  7. Apache SkyWalking Window系统极简搭建入门和IDEA配置agent

    文章目录 1. 搭建OAP 1.1 下载软件包 1.2 解压并启动前后端服务 1.3 打开网站 2. IDEA项目配置Agent 2.1 下载软件包 2.2 解压 2.3 IDEA配置 简要介绍在Wi ...

  8. 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

  9. 《MongoDB极简教程》第一章 NoSQL简史 MongoDB安装环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

最新文章

  1. K项目轶事之被客户通报批评
  2. Java多线程协作(wait、notify、 notifyAll)
  3. SAP存货后续调整总结
  4. opencv 罗曼滤波_勒罗曼杜罗伊
  5. 转专业入门NLP,这样学就对了
  6. 数据集转换_“2000坐标”成了标配,你还不懂坐标系定义和转换吗?
  7. 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则
  8. C# WebRequest.Create 锚点“#”字符问题
  9. 不生成Excel文件,将Datatable数据 Response.write 输出生成Excel (转载)
  10. 《Java和Android开发学习指南(第2版)》——第1章,第1.5节本章小结
  11. php 清除opcache缓存的方法
  12. 敏感词过滤算法对比,顺便开源了个工具库
  13. 西门子200程序案例集
  14. 生物特征识别:小面积指纹识别算法(三)
  15. Apsara Clouder基础技能认证-阿里巴巴编程规范考试流程
  16. ChatGPT中文使用手册
  17. 哈工大教授车万翔:自然语言处理中的伪数据
  18. 博客匿名评论功能正式上线了!
  19. Js中对JSON数组的常用操作
  20. fastjson的漏洞解决—2020年5月28日

热门文章

  1. opssl php rsa_PHP RSA加解密示例(转)
  2. JAVA 语言基础学习
  3. fixture和case数据传递
  4. MS Access 数据库操作使用OledbParameter出现的怪异问题
  5. 电脑登录显示两个账号的处理方法
  6. Greenplum表空间管理
  7. 2022化工自动化控制仪表培训试题及答案
  8. java删不掉_java删除文件删不掉相关阅读-java删除文件删不掉文章阅读-123文学网...
  9. 腾达宽带连接服务器无响应,腾达(Tenda)无线路由器192.168.0.1打不开问题解决方法图文教程...
  10. 人工神经网络原理图解