getway极简落地入门
在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/**
复制代码
楼主因为在小公司,所以只使用该规则就满足了业务要求,如果有其他规则使用,请自行百度,这里不具体介绍。
注意:
- getway只能获取同namespace和group中的服务。
- 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极简落地入门相关推荐
- 合适学习人工智能的小白的一本书《极简AI入门:一本书读懂人工智能思维与应用》
今天看了一本书<极简AI入门:一本书读懂人工智能思维与应用> 对于初学人工智能的小白来说,应该是非常容易看得懂的,书里罗列了人工智能需要学习的各个技能,可以把这本书当作学习人工智能的目录( ...
- Underscore源码阅读极简版入门
看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: github.com/hanzichi/un- 一.架构的实现 1.1:架构 (f ...
- Linux极简快速入门|Linux操作系统(四)
Linux操作系统(四) 目录 Putty的使用 进程相关命令 Linux系统管理命令 passwd.shadow文件内容介绍 一.Putty的使用 putty是支持Telnet.SSH.rlogin ...
- 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. ...
- c++ 使用nacos_想自学Maven?推荐Maven极简高速入门及常规使用
[Java实战技术]原创,专注分享Java基础原理分析.实战技术.微服务架构.分布式系统构建,诚邀点赞关注! 前言 笔者的工作经历中使用过Ant.Maven和Gradle,如果让笔者选择,笔者会首选G ...
- dsl mysql_极简Querydsl入门
1 数据库准备 使用MySQL数据库. 1.1 创建名为learnsql的数据库 建库语句 create datebase learnsql; 使用刚刚创建的learnsql数据库 use learn ...
- Apache SkyWalking Window系统极简搭建入门和IDEA配置agent
文章目录 1. 搭建OAP 1.1 下载软件包 1.2 解压并启动前后端服务 1.3 打开网站 2. IDEA项目配置Agent 2.1 下载软件包 2.2 解压 2.3 IDEA配置 简要介绍在Wi ...
- 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置
MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...
- 《MongoDB极简教程》第一章 NoSQL简史 MongoDB安装环境配置
MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...
最新文章
- K项目轶事之被客户通报批评
- Java多线程协作(wait、notify、 notifyAll)
- SAP存货后续调整总结
- opencv 罗曼滤波_勒罗曼杜罗伊
- 转专业入门NLP,这样学就对了
- 数据集转换_“2000坐标”成了标配,你还不懂坐标系定义和转换吗?
- 敏捷软件开发:原则、模式与实践——第12章 ISP:接口隔离原则
- C# WebRequest.Create 锚点“#”字符问题
- 不生成Excel文件,将Datatable数据 Response.write 输出生成Excel (转载)
- 《Java和Android开发学习指南(第2版)》——第1章,第1.5节本章小结
- php 清除opcache缓存的方法
- 敏感词过滤算法对比,顺便开源了个工具库
- 西门子200程序案例集
- 生物特征识别:小面积指纹识别算法(三)
- Apsara Clouder基础技能认证-阿里巴巴编程规范考试流程
- ChatGPT中文使用手册
- 哈工大教授车万翔:自然语言处理中的伪数据
- 博客匿名评论功能正式上线了!
- Js中对JSON数组的常用操作
- fastjson的漏洞解决—2020年5月28日
热门文章
- opssl php rsa_PHP RSA加解密示例(转)
- JAVA 语言基础学习
- fixture和case数据传递
- MS Access 数据库操作使用OledbParameter出现的怪异问题
- 电脑登录显示两个账号的处理方法
- Greenplum表空间管理
- 2022化工自动化控制仪表培训试题及答案
- java删不掉_java删除文件删不掉相关阅读-java删除文件删不掉文章阅读-123文学网...
- 腾达宽带连接服务器无响应,腾达(Tenda)无线路由器192.168.0.1打不开问题解决方法图文教程...
- 人工神经网络原理图解