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介绍相关推荐

  1. Spring Cloud Gateway介绍(二)

    Spring Cloud Gateway介绍(一) 全局Filters GlobalFilter与GatewayFilter具有一样的接口. 这些全局过滤器都有对应的配置类,例如: org.sprin ...

  2. 网关介绍和作用,Spring Cloud Gateway介绍

    网关是什么? 顾名思义,就是网络关口,把守网络访问的山海关,关内的人只能从山海关出去,关外的人只能从山海关进来. A访问B,A访问C,变成A访问D,然后由D去访问B和C,那么D就是我们的网关. 本文仅 ...

  3. Spring Cloud Gateway介绍(一)

    特性 基于 Java 8 编码 基于 Spring Framework 5 + Project Reactor + Spring Boot 2.0 构建 支持动态路由,能够匹配任何请求属性上的路由 支 ...

  4. Spring Cloud Gateway 源码解析(3) —— Predicate

    目录 RoutePredicateFactory GatewayPredicate AfterRoutePredicateFactory RoutePredicateHandlerMapping Fi ...

  5. Spring Cloud Gateway 源码解析(1) —— 基础

    目录 Gateway初始化 启用Gateway GatewayClassPathWarningAutoConfiguration GatewayLoadBalancerClientAutoConfig ...

  6. Spring Cloud学习笔记—网关Spring Cloud Gateway官网教程实操练习

    Spring Cloud学习笔记-网关Spring Cloud Gateway官网教程实操练习 1.Spring Cloud Gateway介绍 2.在Spring Tool Suite4或者IDEA ...

  7. Spring cloud gateway 详解和配置使用

    spring cloud gateway 介绍 1. 网关是怎么演化来的 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 注:图片来自网络 2. 网关的基本功能 网关核心功能是路 ...

  8. 【项目实战】Spring Cloud Gateway入门介绍 - 网关过滤器工厂

    一.全局过滤器GlobalFilter 全局过滤器是针对于网关而言通用的功能组件实现,采用全局来实现. 以下是两个如何全局过滤器GlobalFilter的实例 1.1 实例1:定义ForwardAut ...

  9. spring cloud gateway之服务注册与发现

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在之前的文章介绍了Spring Cloud Gateway的Predict(断言).Filter( ...

  10. spring cloud gateway之filter篇

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理, ...

最新文章

  1. Widgets 整理
  2. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel
  3. 内核随记(三)--同步(2)【转】
  4. 服务器端会话技术Session|| Session的原理||Session的细节||session的钝化session的活化||session的特点||session与Cookie的区别
  5. LIS(基于贪心的O(NlogN)解法)
  6. 南通大学计算机网络及应用,南通大学《计算机网络》课程设计资料.pdf
  7. [记忆碎片的磁盘整理]老妈
  8. php date 报错,编译安装PHP报错:ext/date/php_date.lo is not a valid libtool object
  9. linux系统需要备份吗,准备好了吗?请备份你的Linux系统
  10. mysql centos 安装目录在哪_centos中如何查看mysql安装目录在哪
  11. 液晶面板里面有些什么配件_液晶电视核心部件液晶面板有哪些类型?
  12. eclipse中html设置,无法在eclipse中设置HTMLUNIT
  13. oracle帮助系统,Oracle1 0g扩展的帮助文件的安装
  14. 华硕笔记本电池软件_成色配置都还不错的二手华硕7代 i5 笔记本电脑 只卖1599元 想要的 快进来看看...
  15. Pr 视频速率与关键帧
  16. Tomcat安装及配置详解
  17. 图像像素类型转换与归一化
  18. word图片不显示或显示不全
  19. 1KB (Kilobyte 千字节)=1024B=8192b【大B代表Byte字节,小b代表bit位】
  20. 阿里云服务器通用型实例g5与g6区别及如何选择?

热门文章

  1. 【信号处理第十二章】转置卷积
  2. Interpreting and Disentangling Feature Components of Various Complexity from DNNS论文解读
  3. 第四季-专题8-LINUX系统调用
  4. 数据--第36课 - 遍历二叉树
  5. 开源大数据周刊-第74期
  6. 07-图5 Saving James Bond - Hard Version
  7. Hadoop 源代码分析(二三)FSDirectory
  8. greenDAO系列7--关系
  9. 【wikioi】1014 装箱问题
  10. 通过里程碑式管理,控制软件项目管理进度