最新的SpringCloud(H版Alibaba)技术(11-12初级部分,网关【Gateway】)
文章目录
- 十一、zuul路由网关
- 十二、Gateway新一代网关
- 简介
- 三大核心概念
- Route(路由)
- Predicate(断言)
- Filter(过滤)
- 总体
- Gateway工作流程
- 入门配置
- Gateway网关路由的两种配置方式
- 通过微服务名实现动态路由
- Predicate的使用
- After/Before/Between
- Cookie
- Header
- Host
- Method
- Path
- Query
- 总结
- Filter的使用
- 自定义过滤器
十一、zuul路由网关
zuul核心人员走了两个,zuul2的研发过久,spring公司等不及,自己研发的Gateway网关。
zuul路由网管,阳哥没讲,跳过,没笔记。
https://github.com/Netflix/zuul/wiki
十二、Gateway新一代网关
https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/
简介
三大核心概念
Route(路由)
Predicate(断言)
Filter(过滤)
总体
Gateway工作流程
官网总结
入门配置
新建模块cloud-gateway-gateway9527
pom
<dependencies><!--gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity --><dependency><groupId>com.angenin.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><!--eureka client(通过微服务名实现动态路由)--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies>
yml
server:port: 9527spring:application:name: cloud-gatewayeureka:instance:hostname: cloud-gateway-serviceclient:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://eureka7001.com:7001/eureka/
主启动类GatewayMain9527
@SpringBootApplication @EnableEurekaClient public class GatewayMain9527 {public static void main(String[] args) {SpringApplication.run(GatewayMain9527.class, args);} }
修改yml文件
server:port: 9527spring:application:name: cloud-gatewaycloud:gateway:routes:- id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名#匹配后提供服务的路由地址uri: http://localhost:8001predicates:- Path=/payment/get/** # 断言,路径相匹配的进行路由- id: payment_route2uri: http://localhost:8001predicates:- Path=/payment/lb/** #断言,路径相匹配的进行路由eureka:instance:hostname: cloud-gateway-serviceclient:fetch-registry: trueregister-with-eureka: trueservice-url:defaultZone: http://eureka7001.com:7001/eureka/
测试,启动7001,cloud-provider-payment8001,9527
http://localhost:8001/payment/get/1
http://localhost:9527/payment/get/1
Gateway网关路由的两种配置方式
在配置文件中配置
在配置文件yml中配置在配置类中配置
代码中注入RouteLocator的Bean
新建config.GatewayConfig@Configuration public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();routes.route("path_route_angenin", //idr -> r.path("/guonei") //访问 http://localhost:9527/guonei.uri("http://news.baidu.com/guonei")); //就会转发到 http://news.baidu.com/guoneiroutes.route("path_route_angenin2", //idr -> r.path("/guoji") //访问 http://localhost:9527/guoji.uri("http://news.baidu.com/guoji")); //就会转发到 http://news.baidu.com/guonjireturn routes.build();}// @Bean // public RouteLocator customRouteLocator2(RouteLocatorBuilder routeLocatorBuilder){// RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes(); // // routes.route("path_route_angenin2", //id // r -> r.path("/guoji") //访问 http://localhost:9527/guoji // .uri("http://news.baidu.com/guoji")); //就会转发到 http://news.baidu.com/guonji // // return routes.build(); // }}
测试,启动7001,8001,9527
http://localhost:9527/guonei
http://localhost:9527/guoji
通过微服务名实现动态路由
修改yml文件
spring:application:name: cloud-gatewaycloud:gateway:discovery:locator:enabled: true #开启从注册中心动态创建路由的功能,利用微服务名称进行路由(默认false)routes:- id: payment_route #路由的id,没有规定规则但要求唯一,建议配合服务名
# uri: http://localhost:8001 #匹配后提供服务的路由地址uri: lb://cloud-payment-servicepredicates:- Path=/payment/get/** #断言,路径相匹配的进行路由- id: payment_route2
# uri: http://localhost:8001uri: lb://cloud-payment-servicepredicates:- Path=/payment/lb/** #断言,路径相匹配的进行路由
enabled默认false:
测试,启动7001,8001,8002,9527
http://localhost:9527/payment/lb
Predicate的使用
官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories
常用的Route Predicate
After/Before/Between
新建测试类T2
public class T2 {public static void main(String[] args) {//获取当前时间串ZonedDateTime now = ZonedDateTime.now();System.out.println(now);//2020-06-17T11:53:40.325+08:00[Asia/Shanghai]}}
然后在yml中的predicates:
加上
#指定时间后才能访问(After)时间往后写一小时- After=2020-06-17T12:53:40.325+08:00[Asia/Shanghai]
测试,启动7001,8001,8002,9527
http://localhost:9527/payment/lb
Before和Between作用一样:
#指定时间前才能访问(Before)- Before=2020-06-17T11:53:40.325+08:00[Asia/Shanghai]#指定时间内才能访问(Between)- Between=2020-06-17T11:53:40.325+08:00[Asia/Shanghai],2020-06-17T12:53:40.325+08:00[Asia/Shanghai]
Cookie
在yml中的predicates:
加上(记得把after的时间改成已经过去的时间,时间没到访问不了)
- Cookie=username,angenin #带Cookie,并且username的值为angenin
不带cookie访问
打开终端,输入curl http://localhost:9527/payment/lb
(直接访问失败)
带cookie访问
输入curl http://localhost:9527/payment/lb --cookie "username=angenin"
Header
注释掉其他两个,加上Header
# - After=2020-06-17T12:53:40.325+08:00[Asia/Shanghai]
# - Cookie=username,angenin #带Cookie,username的值为angenin- Header=X-Request-Id, \d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式
重启9527,然后在终端输入http://localhost:9527/payment/lb -H "X-Request-Id:123"
Host
加上:
- Host=**.angenin.com #Host: xxx.angenin.com 请求是Host必须有**.angenin.com
重启9527
http://localhost:9527/payment/lb -H "Host: www.angenin.com"
Method
- Method=GET #只允许get请求访问
Path
#访问的url地址有 /payment/lb/ 才能访问- Path=/payment/lb/**
已经用过了,这里不进行演示。
Query
- Query=username, \d+ #url请求地址必须带上username参数,并且值必须为整数
http://localhost:9527/payment/lb?username=110
总结
Filter的使用
GatewayFilter(31种)
Global Filter(10种)
这里以AddRequestParameter
为代表。
自定义过滤器
新建filter.MyLogGateWayFilter
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("**************come in MyLogGateWayFilter:" + new Date());//获取request中的uname参数String uname = exchange.getRequest().getQueryParams().getFirst("uname");if(uname == null){log.info("*******用户名为null,非法用户!!");//设置响应,不被接受exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);return exchange.getResponse().setComplete();}//返回chain.filter(exchange),放行return chain.filter(exchange);}@Overridepublic int getOrder() {//返回值是过滤器的优先级,越小优先级越高(最小-2147483648,最大2147483648)return 0;}
}
启动7001,8001,8002,9527
http://localhost:9527/payment/lb?uname=111
http://localhost:9527/payment/lb?xxx=111
下一篇笔记:最新的SpringCloud(H版&Alibaba)技术(13-14初级部分,服务配置【Config】与消息总线【Bus】)
学习视频(p65-p73):https://www.bilibili.com/video/BV18E411x7eT?p=65
最新的SpringCloud(H版Alibaba)技术(11-12初级部分,网关【Gateway】)相关推荐
- SpringCloud(H版alibaba)之基本框架篇
SpringCloud(H版&alibaba)之基本框架篇 什么是微服务 https://www.bilibili.com/video/BV18E411x7eT?p=14 视频内容 微服务和分 ...
- springcloud H版+alibaba cloud4
springcloud H版+alibaba cloud4 19,sleuth链路追踪 20,springcloud alibaba 21,nacos 22,sentinel 23,seata 19, ...
- 尚硅谷SpringCloud(H版alibaba)框架开发教程(大牛讲授spring cloud) 最详细的。
尚硅谷SpringCloud(H版&alibaba)框架开发教程(大牛讲授spring cloud) 一. 从2.2.x和H版开始说起 二.关于Cloud各种组件的停更/升级/替换 三.微服务 ...
- 尚硅谷2020最新版周阳SpringCloud(H版alibaba)框架开发教程 学习笔记
前言:今天看到周阳老师出了新课,十分欣喜,很喜欢周阳老师的讲课风格,内容也充实,我也算是周阳老师忠实粉丝啦. 新出的springcloud第二版很符合我现阶段的学习需求.但美中不足的是,目前只有视频资 ...
- SpringCloud( H版 alibaba )框架开发教程(中级)
中级 编码五部曲: 建module 改pom 写yml 主启动 业务类 所有源码地址:https://gitee.com/xyy-kk_admin/spring-cloud 入门篇链接:https:/ ...
- 尚硅谷2020最新版SpringCloud(H版alibaba)框架开发教程全套完整版从入门到精通
01_前言闲聊和课程说明 02_零基础微服务架构理论入门 03_第二季Boot和Cloud版本选型 04_Cloud组件停更说明 05_父工程Project空间新建 06_父工程pom文件 07_复习 ...
- 尚硅谷周阳老师2020年 SpringCloud(H版和Alibaba) 视频教程学习时整理的笔记记录和代码
尚硅谷周阳老师2020年 SpringCloud(H版和Alibaba)视频教程学习时整理的笔记记录和代码 尚硅谷周阳老师SpringCloud(H版和Alibaba)学习.代码摘录,下面是各个mod ...
- SpringCloud H版之Eureka学习
SpringCloud H版之Eureka学习 欢迎学习SpringCloud Netflix Eureka 什么是服务注册与发现 Eureka Server提供服务注册服务 EurekaClient ...
- SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤
说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...
最新文章
- 2021年春季学期-信号与系统-第十二次作业参考答案-第三小题
- Nhibernate分页测试续(附源码)
- 【集合论】关系闭包 ( 关系闭包相关定理 )
- Android RemoteController使用
- mvcpager之学习
- 河外动态:疑似UFO的编队在太阳附近徘徊
- .Net之Layui多图片上传
- 【转】打印机硬件发现不了解决办法
- 【MyBean调试笔记】接口的使用和清理
- Java并发(基础知识)—— 创建、运行以及停止一个线程
- html-制作开心网游戏页面,【手把手】制作一个简单的HTML网页
- Poi-tl通过word模板生成文件页眉页脚冲突问题
- python 画雷达图设置背景颜色
- MOSES系统训练中间过程和意义详解
- AD采集中常用的Ksps什么意思
- java基于ssm开发的弹幕视频网站源码
- 佛山市南海技师学校计算机类,佛山南海信息技术学校2019年招生录取分数线
- Python能做什么?
- Consul Consensus Protocol
- 让人绝望的C语言恶搞小程序,网友:生无可恋!
热门文章
- Spacy en_core_web_sm
- dplayer解析源码php调用,从demo分析ijk源码一:视频播放
- scala:查询圆周率pi
- 学习曲线和决策边界的绘制
- 天使投资人徐小平:最爱理性狂热创业者
- “素质教育”与“动力汽车”——徐小平
- Redis连接池技术笔记小结 RedisPool
- 基于JavaWeb SSM mybatis 私人健身房系统管理平台设计和实现以及文档报告
- Java中class与Class的区别
- 阿里员工感慨:涂鸦和阿里之间选了阿里,涂鸦上市了,小丑竟是我自己