什么是 Spring Cloud Gateway?

Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 Netflix ZUUL,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

Spring Cloud Gateway 功能特征

  • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
  • 动态路由
  • Predicates 和 Filters 作用于特定路由
  • 集成 Hystrix 断路器
  • 集成 Spring Cloud DiscoveryClient
  • 易于编写的 Predicates 和 Filters
  • 限流
  • 路径重写

Spring Cloud Gateway 工程流程


客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。

过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑。

构建路由网关cloud-alibaba

1.在父项目中创建子module项目名字为cloud-alibaba,在pom中引入Gateway依赖

<!--gateway网关 不能引入starter-web--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

完整服务消费者cloud-alibaba的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>cloud-alibaba</artifactId><groupId>com.zsy</groupId><version>1.0-SNAPSHOT</version></parent><groupId>com.zsy</groupId><artifactId>cloud-gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>cloud-gateway</name><dependencies><!--gateway网关 不能引入starter-web--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2.配置application.yml或者properties文件

server:port: 7777
spring:application:name: api-gatewaycloud:gateway:discovery:locator:enabled: true #让gateway可以发现nacos中的微服务routes: # 路由数组  指当请求满足什么样的条件的时候,转发到哪个微服务上- id: cloud-account #当前路由标识,要求唯一 (默认值uuid,一般不用,需要自定义)uri: lb://cloud-account #请求最终要被转发的地址   lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略order: 1 #路由优先级,数字越小,优先级越高predicates: #断言 判断条件,返回值是boolean 转发请求要返回的条件 (可以写多个)、- Path=/cloud-account/** #当请求路径满足path指定的规则时,此路由信息才会正常转发filters: #过滤器(在请求传递过程中,对请求做一些手脚)- StripPrefix=1 # 在请求转发之前去掉一层路径nacos:discovery:server-addr: 127.0.0.1:8848

3.配置消费者启动服务的启动类

package com.zsy.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class CloudGatewayApplication {public static void main(String[] args) {SpringApplication.run(CloudGatewayApplication.class, args);}
}

4.启动cloud-account服务项目,启动成功,如下图

5. 验证服务,浏览器访问http://localhost:8081/getAccount,返回如下图

查看cloud-account控制台,如下图

6.启动cloud-gateway项目,启动成功,如下图

7. 验证服务,浏览器访问http://localhost:777/cloud-account/getAccount,返回如下图

注意:请求方式是 http://路由网关IP:路由网关Port/服务名


查看消费者cloud-account控制台,如下图

Spring Cloud Gateway 的路由功能配置成功

码云地址:https://gitee.com/zlzhaoe/cloud-alibaba

SpringCloud Alibaba微服务实战(六) - 路由网关(Gateway)相关推荐

  1. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤

    说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...

  2. SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断

    什么是Sentinel? 请查看文章:SpringCloud Alibaba微服务实战(一) - 基础环境搭建 构建服务消费者cloud-sentinel进行服务调用 服务创建请查看文章:Spring ...

  3. SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心

    说在前面 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos Config就是一个类似于SpringCloud Config的配置中心. 一.启动N ...

  4. SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)

    什么是Feign Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 ...

  5. SpringCloud Alibaba微服务实战三 - 服务调用

    SpringCloud Alibaba微服务实战三 - 服务调用 通过前面两篇文章我们准备好了微服务的基础环境并运行注册服务到nacos上了 统一接口返回结构 在开始今天的正餐之前我们先把上篇文章中那 ...

  6. SpringCloud Alibaba微服务实战(一) - 基础环境搭建

    说在前面 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来 ...

  7. SpringCloud Alibaba微服务实战(二) - Nacos服务注册与restTemplate消费

    说在前面 基础环境搭建,理论,请看上一篇,在这就不扯理论了,直接上代码. 项目结构 代码实现 第一步:在父pom的项目中引入dependencyManagement 在引入父pom之前咱们先来回顾下d ...

  8. controller调用controller的方法_SpringCloud Alibaba微服务实战三 - 服务调用

    导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...

  9. java 限流熔断_SpringCloud Alibaba微服务实战五 - 限流熔断

    简介 Sentinel是面向分布式服务框架的轻量级流量控制框架,主要以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度来维护系统的稳定性.在SpringCloud体系中,sentinel主要 ...

最新文章

  1. Linux查看多核CPU利用率
  2. 前端——解决微信网页清除缓存的方法
  3. PXA270-基于ARM9内核Processor外部NAND FLASH的控制实现
  4. swoole-co-pool v1.0.1,Swoole 协程工作池
  5. PHP中调用Java类的两个办法
  6. python 退出程序_Python:用Ctrl+C解决终止多线程程序的问题!(建议收藏)
  7. Xor Transformation
  8. python内存管理机制_python内存管理机制
  9. java实例成员和类成员变量的区别_Java之实例成员与类成员
  10. 电脑保密检查清除痕迹_保密安全|2020年国家安全与保密宣传周来啦!
  11. 软件项目可持续性运作地思考
  12. java中peek是什么意思,在Java流中,PEEK真的只用于调试吗?
  13. 开发一个 app 有多难?需要多少钱?
  14. 【python学习笔记】25:scipy中值滤波
  15. 计算机视觉这个专业怎么样?
  16. 体育馆团体预约系统UML软件工程第16周项目日志
  17. 骗子的常用骗术,虚拟货币真假难辨
  18. JDK8新特性—常用函数式接口
  19. 信息技术教案计算机知识产权,[中学联盟]云南省罗平县第一中学高一《信息技术基础》参考教案:信息技术对人类社会的影响及知识产权 (2份打包)...
  20. eps高程点和高程注记不符_利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找...

热门文章

  1. 条形码?二维码?生成、解析都在这里!
  2. Redis 笔记(14)— 持久化及数据恢复(数据持久方式 RDB 和 AOF、数据恢复、混合持久化)
  3. idea内Maven的全局配置
  4. 【牛腩新闻发布系统】整和后台05
  5. jquery过滤HTML标签方法
  6. RPC远程调用通俗理解
  7. 创 keras_contrib 安装
  8. Map再整理,从底层源码探究HashMap
  9. The bean 'xxxx.FeignClientSpecification', defined in null, could not be registered. A bean with that
  10. 科技公司重新关注2级以上驾驶员辅助