SpringCloud GateWay 使用 网关路由
时间:2021-07-19
本文章向大家介绍SpringCloud GateWay 使用 网关路由,主要包括SpringCloud GateWay 使用 网关路由使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
GateWay之路由转发和过滤
在一个Gateway项目(配置了eureka等组件)中进行配置
server: port: 9006 spring: application: name: zhao-service-gateway cloud: gateway: routes: - id: service-autodeliver-router #uri: http://127.0.0.1:8091 uri: lb://zhao-service-autodeliver predicates: - Path= /autodeliver/** - id: service-resume-router #uri: http://127.0.0.1:8081 uri: lb://zhao-service-resume predicates: - Path=/resume/** filters: - StripPrefix=1
通过第一个服务hao-service-autodeliver的配置形式,使用固定ip和服务名均可正常通过网关项目访问到服务,但是固定ip的方式不太灵活,而 lb://zhao-service-autodeliver可以实现随机的负载均衡,且不用填写固定ip也避免了不要的麻烦
第二个服务配置中 filters:- StripPrefix=1这个配置会过滤掉第一个路径配置,所以我们在最后访问的时候,除了需要加上第一个过滤掉的配置,还需要加上原本的配置。访问形式如下
GateWay断言
上述针对路径的配置即是断言predicates的配置,而Gateway还内置了以下几种断言
基本上上述断言都是基于请求携带的信息进行过滤的,在实际操作过程中可以综合使用这些信息来达到我们想要的操作
GateWay自定义全局过滤器
//www.fhadmin.cn @Component @Slf4j public class BlackListFilter implements GlobalFilter, Ordered{ private static final List<String> blackList=new ArrayList<>(); static { blackList.add("0:0:0:0:0:0:0:1");//模拟本机ip地址 } @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response =exchange.getResponse(); String clientIp = request.getRemoteAddress().getHostString(); if (blackList.contains(clientIp)){ response.setStatusCode(HttpStatus.UNAUTHORIZED); log.error(clientIp+"在黑名单中,拒绝访问"); String data = "request be denied"; DataBuffer wrap = response.bufferFactory().wrap(data.getBytes()); return response.writeWith(Mono.just(wrap)); } return chain.filter(exchange); } @Override public int getOrder() { return 0; } }
通过该过滤器拦截了黑名单中的请求(该操作在实际中可借助mysql或redis等数据存储实现),实现效果
GateWay的高可用
⽹关作为⾮常核⼼的⼀个部件,如果挂掉,那么所有请求都可能⽆法路由处理,因此我们需要做GateWay的⾼可⽤。GateWay的⾼可⽤很简单:可以启动多个GateWay实例来实现⾼可⽤,在GateWay的上游使⽤Nginx等负载均衡设备进⾏负载转发以达到⾼可⽤的⽬的。启动多个GateWay实例(假如说两个,⼀个端⼝9002,⼀个端⼝9003),剩下的就是使⽤Nginx等完成负载代理即可。
原文地址:https://www.cnblogs.com/teacher11/p/15029623.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 我有个大胆的方案可以提高ARouter和WMRouter的编译速度
- Tornado模板对空白字符的处理与解决方案
- View的有效曝光监控(上)|RecyclerView 篇
- PHP绕过open_basedir列目录的研究
- View的有效曝光监控(下)|ScrollView NestScrollView篇
- 聊聊AbstractProcessor和Java编译流程
- Okhttp如何开启的Http2.0
- PHP Execute Command Bypass Disable_functions
- 聊聊Android编译流程
- Android组件化问题思考
- 最近面试碰到的两道算法题|面试相关
- Thread也会OOM吗?
- RoundCube Webmail邮件正文存储型XSS(CVE-2015-1433)
- 再谈Android Lint
- Android DiffUtil 封装|深拷贝