springcloud服务网关-gateway
文档
Spring Cloud Gateway官方文档地址
特性
- Java 8
- Spring Framework 5
- Spring Boot 2
- 动态路由
- 内置到Spring Handler映射中的路由匹配
- 基于HTTP请求的路由匹配 (Path, Method, Header, Host, etc…)
- 过滤器作用于匹配的路由
- 支持Spring Cloud DiscoveryClient配置路由,与服务发现与注册配合使用
应用
本文springcloud基于Finchley.RELEASE版本
- pom.xml引入gateway依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
复制代码
- 新建自定义filter,继承AbstractGatewayFilterFactory
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;import java.util.Arrays;
import java.util.List;/*** 过滤器* @author 爱飘de小子*/
@Slf4j
@Component
public class CustomGatewayFilterFactory extends AbstractGatewayFilterFactory<CustomGatewayFilterFactory.Config> {public CustomGatewayFilterFactory() {super(Config.class);log.info("加载 自定义拦截器 [Custom]...");}@Overridepublic Config newConfig() {return new Config();}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("enabled");}/*** @param config* @return*/@Overridepublic GatewayFilter apply(CustomGatewayFilterFactory.Config config) {return (exchange, chain) -> {//Custom=false 跳过验证if (!config.isEnabled()) {return chain.filter(exchange);}//获取请求信息ServerHttpRequest request = exchange.getRequest();HttpHeaders headers = request.getHeaders();//获取请求参数 //具体业务略....String token = headers.getFirst("token");System.out.println("====token===="+token);return chain.filter(exchange);};}public static class Config {/*** 控制是否开启拦截器*/private boolean enabled;public Config() {}public boolean isEnabled() {return enabled;}public void setEnabled(boolean enabled) {this.enabled = enabled;}}
}
复制代码
- bootstrap.yml配置gateway
spring:application:name: gateway-democloud:gateway:discovery:locator:enabled: true #是否开启lower-case-service-id: truedefault-filters: #全局过滤器配置routes:- id: weburi: lb://epw-webpredicates:- Path=/web/**filters:- StripPrefix=1# 配置自定义CustomGatewayFilterFactory ,Custom是CustomGatewayFilterFactory的前缀,gateway默认省略GatewayFilterFactory- Custom=true- id: commonuri: lb://epw-commonpredicates:- Path=/common/**filters:- StripPrefix=1eureka:instance:prefer-ip-address: truelease-renewal-interval-in-seconds: 10 #表示eureka client发送心跳给server端的频率,默认为30秒health-check-url-path: /actuator/health #健康检查的地址(依赖spring-boot-starter-actuator)client:registry-fetch-interval-seconds: 10 #表示eureka client间隔多久去拉取服务注册信息,默认为30秒service-url:defaultZone: http://localhost:8761/eureka/
复制代码
说明:
- default-filters: 里面可以定义一些共同的filter,对所有路由都起作用
- routes:具体的路由信息,是一个数组,每一个路由基本包含部分:
- id:这个路由的唯一id,不定义的话为一个uuid
- uri:http请求为lb://前缀 + 服务id;ws请求为lb:ws://前缀 + 服务id;表示将请求负载到哪一个服务上
- predicates:表示这个路由的请求匹配规则,只有符合这个规则的请求才会走这个路由。为一个数组,每个规则为并且的关系。
- filters:请求转发前的filter,为一个数组。
- order:这个路由的执行order
4.项目启动启动类
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;/*** @author 爱飘de小子*/
@SpringCloudApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}
复制代码
说明: @SpringCloudApplication是一个组合注解,包含@SpringBootApplication @EnableDiscoveryClient
springcloud服务网关-gateway相关推荐
- SpringCloud 微服务网关Gateway 动态路由配置
概述:在上一章节<SpringCloud 微服务网关Gateway介绍及简单路由配置>中我们讲述了Gateway的最简单的路由配置方式.但是其中比较明显的问题就是我们在配置路由服务的地址时 ...
- SpringCloud—— 微服务网关GateWay
目录 1.GateWay网关概述 1.1.什么是GateWay? 1.2.为什么要使用微服务网关? 1.3.Zuul与GateWay网关的区别? 2.快速入门 2.1.创建项目 2.2.配置yml文件 ...
- 博海拾贝--springcloud的组件及使用(3)服务网关 GateWay
Srpingcloud 服务网关 GateWay 前言: Spring Cloud Gateway是springcloud官方推出的第二代网关框架,她包括转发.限流.熔断.权限校验等功能. 本文就来介 ...
- Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway
转载自 Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使 ...
- Spring Cloud之(十八)微服务网关GateWay
十八.微服务网关GateWay Zuul 1.x 是一个基于阻塞 IO 的 API Gateway 以及 Servlet:直到 2018 年 5 月,Zuul 2.x(基于Netty,也是非阻塞的,支 ...
- SpringCloud 微服务网关Gateway介绍及简单路由配置
概述:什么是微服务网关?为了解决用户客户端在调用微服务系统中的多个消费者工程接口时,需要维护非常多的消费者应用接口地址等信息,以及可能存在不同应用见的调用跨域等问题,微服务网关组件随即出现.网关作为用 ...
- 微服务_服务网关(Gateway)
目录 一.为什么需要网关 二.SpringCloud网关的实现方式 三.Gateway实践 1)创建gateway服务,引入依赖 2)编写启动类 3)编写基础配置和路由规则 4)重启测试 5)网关路由 ...
- 微服务网关Gateway(七)
前言 zuul目前已经出现了分歧,zuul 升级到 Zuul2的时候出现了内部分歧,并且导致Zuul的核心人员的离职,导致Zuul2一直跳票,等了两年,目前造成的局面是Zuul已经没人维护,Zuul2 ...
- 微服务网关Gateway
使用场景 不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微服务,增加了客户端 ...
最新文章
- cloud-init 工作原理 - 每天5分钟玩转 OpenStack(171)
- 前端构建工具gulp之基本介绍
- Linux 利用yum源安装php5.6+nginx
- eclipse中插件修改svn用户名密码
- POJ 3164 Command Network (最小树形图)
- javascript保留两位
- JDBC 获取被插入数据的主键ID值
- 内存工作原理及发展历程
- 配置Windows Server 2008群集
- csu 1578 Opening Ceremony (递推 )
- 计算机教室管理使用规则,多媒体教室使用管理细则
- 搭窝---开篇语---爆笑语录
- 惠普Elite Mini 800 G9 评测
- 2017北邮计算机考研经验总结,北邮计算机专考研经验总结.docx
- 设计模式(四)工厂模式
- 拿到FaceBook注册用户的手机号有多简单?看这篇文章就够了。
- Android实现3DTouch效果
- 小迪渗透内网渗透(玖)
- Fastdfs数据迁移方案
- 5G网络正式商用对4G物联网卡造成何种影响?
热门文章
- android Bitmap类方法属性 详细说明
- 我的小纠结,技术与认知哪个更重要?
- posix,perl正则表达式区别
- javaweb中服务器启动所执行的程序
- Android Robolectric 加载运行本地 So 动态库
- 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭“的解决
- Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析
- 130825组队赛-Regionals 2012, North America - East Central NA
- 从ip_queue到nfnetlink_queue(上)
- 准备在北京Tech·Ed上组织博客园聚会