Spring cloud Gateway介绍
gateway的三大核心概念是路由、断言、过滤。
Route(路由)路由是构建网关的基本模块,它由ID,目标URI,一些列的断言和过滤器组成,如果断言为ture 则匹配该路由。
Predicate(断言),参考的是Java8的java.util.function.Predicate,开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言匹配则进行路由。
Filter(过滤)只得是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或之后对请求进行修改。
cloud-gateway-gateway9527
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springCloud</artifactId><groupId>com.george.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>cloud-gateway-gateway9527</artifactId><dependencies><!--gateway--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><!--引入自定义的api通用包,可以使用Payment支付Entity--><dependency><groupId>com.george.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency><!--web Gateway不需要web依赖,会报错Parameter 0 of method modifyResponseBodyGatewayFilterFactory in org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found.--><!-- <dependency>--><!-- <groupId>org.springframework.boot</groupId>--><!-- <artifactId>spring-boot-starter-web</artifactId>--><!-- </dependency>--><!-- <dependency>--><!-- <groupId>org.springframework.boot</groupId>--><!-- <artifactId>spring-boot-starter-actuator</artifactId>--><!-- </dependency>--></dependencies>
</project>
## =========================
## 路由写死的方式
## =========================
#server:
# port: 9527
#spring:
# application:
# name: cloud-gateway
# cloud:
# gateway:
# routes:
# - id: payment_routh #payment_route 路由的ID 没有固定规则但要求唯一,建议配合服务名
# uri: http://localhost:8001 #匹配后提供服务的路由地址
# predicates:
# - Path=/payment/get/** #断言,路径相匹配的进行路由
#
# - id: payment_routh2
# uri: http://localhost:8001
# predicates:
# - Path=/payment/lb/**# =========================
# 动态路由方式
# =========================
server:port: 9527
spring:application:name: cloud-gatewaycloud:gateway:discovery:locator:enabled: true #开启注册中心路由功能,利用微服务名进行路由# lower-case-service-id: trueroutes:- id: payment_routh# uri: http://localhost:8001uri: lb://cloud-payment-service # 匹配后提供服务的路由地址;predicates:- Path=/payment/get/**
# - After=2021-01-28T16:56:10.793+08:00[Asia/Shanghai]- id: payment_routh2# uri: http://localhost:8001uri: lb://cloud-payment-servicepredicates:- Path=/payment/lb/**eureka:instance:hostname: cloud-gateway-serviceclient:service-url:register-with-eureka: truefetch-registry: truedefaultZone: http://eureka7001.com:7001/eureka #单机
# defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群
package com.george.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;/*** @author Yang Hao* @description* @date 2020-09-18 16:18*/
@SpringBootApplication
@EnableEurekaClient
public class GateWayMain9527 {public static void main(String[] args) {SpringApplication.run(GateWayMain9527.class);}
}
package com.george.springcloud.config;import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author Yang Hao* @description 编码的方式* 官网 https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gatewayfilter-factories* @date 2020-09-18 16:55*/
@Configuration
public class GatewayConfig {/*** 配置一个ID为 path_route_george 的路由规则* 当访问地址:http://localhost:9527/guonei 时会自动转发到地址 http://news.baidu.com/guonei** @param routeLocatorBuilder* @return*/@Beanpublic RouteLocator customeRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {return routeLocatorBuilder.routes().route("path_route_george", r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();}
}
package com.george.springcloud.filter;import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;import java.util.Date;/*** @author Yang Hao* @description 自定义全局GlobalFilter* @date 2020-09-18 17:49*/
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("------------ come in MyLogGateWayFilter: " + new Date());String uname = exchange.getRequest().getQueryParams().getFirst("uname");if (StringUtils.isEmpty(uname)) {log.info("------------ 用户名 [{}] 非法 o(╥﹏╥)o", uname);exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);return exchange.getResponse().setComplete();}return chain.filter(exchange);}@Overridepublic int getOrder() {return 0;}
}
启动注册中心7001,支付服务8001和支付服务8002,启动网关。
运行结果:
Spring cloud Gateway介绍相关推荐
- Spring Cloud Gateway介绍(二)
Spring Cloud Gateway介绍(一) 全局Filters GlobalFilter与GatewayFilter具有一样的接口. 这些全局过滤器都有对应的配置类,例如: org.sprin ...
- 网关介绍和作用,Spring Cloud Gateway介绍
网关是什么? 顾名思义,就是网络关口,把守网络访问的山海关,关内的人只能从山海关出去,关外的人只能从山海关进来. A访问B,A访问C,变成A访问D,然后由D去访问B和C,那么D就是我们的网关. 本文仅 ...
- Spring Cloud Gateway介绍(一)
特性 基于 Java 8 编码 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建 支持动态路由,能够匹配任何请求属性上的路由 支 ...
- Spring Cloud Gateway 源码解析(3) —— Predicate
目录 RoutePredicateFactory GatewayPredicate AfterRoutePredicateFactory RoutePredicateHandlerMapping Fi ...
- Spring Cloud Gateway 源码解析(1) —— 基础
目录 Gateway初始化 启用Gateway GatewayClassPathWarningAutoConfiguration GatewayLoadBalancerClientAutoConfig ...
- Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习
Spring Cloud学习笔记-网关Spring Cloud Gateway官网教程实操练习 1.Spring Cloud Gateway介绍 2.在Spring Tool Suite4或者IDEA ...
- Spring cloud gateway 详解和配置使用
spring cloud gateway 介绍 1. 网关是怎么演化来的 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 注:图片来自网络 2. 网关的基本功能 网关核心功能是路 ...
- 【项目实战】Spring Cloud Gateway入门介绍 - 网关过滤器工厂
一.全局过滤器GlobalFilter 全局过滤器是针对于网关而言通用的功能组件实现,采用全局来实现. 以下是两个如何全局过滤器GlobalFilter的实例 1.1 实例1:定义ForwardAut ...
- spring cloud gateway之服务注册与发现
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在之前的文章介绍了Spring Cloud Gateway的Predict(断言).Filter( ...
- spring cloud gateway之filter篇
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理, ...
最新文章
- Widgets 整理
- springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
- 内核随记(三)--同步(2)【转】
- 服务器端会话技术Session|| Session的原理||Session的细节||session的钝化session的活化||session的特点||session与Cookie的区别
- LIS(基于贪心的O(NlogN)解法)
- 南通大学计算机网络及应用,南通大学《计算机网络》课程设计资料.pdf
- [记忆碎片的磁盘整理]老妈
- php date 报错,编译安装PHP报错:ext/date/php_date.lo is not a valid libtool object
- linux系统需要备份吗,准备好了吗?请备份你的Linux系统
- mysql centos 安装目录在哪_centos中如何查看mysql安装目录在哪
- 液晶面板里面有些什么配件_液晶电视核心部件液晶面板有哪些类型?
- eclipse中html设置,无法在eclipse中设置HTMLUNIT
- oracle帮助系统,Oracle1 0g扩展的帮助文件的安装
- 华硕笔记本电池软件_成色配置都还不错的二手华硕7代 i5 笔记本电脑 只卖1599元 想要的 快进来看看...
- Pr 视频速率与关键帧
- Tomcat安装及配置详解
- 图像像素类型转换与归一化
- word图片不显示或显示不全
- 1KB (Kilobyte 千字节)=1024B=8192b【大B代表Byte字节,小b代表bit位】
- 阿里云服务器通用型实例g5与g6区别及如何选择?