使用SpringCloud实现Java分布式开发【part-5】:Spring Cloud Gateway网关的介绍及使用、路由前缀处理、局部过滤器和全局过滤器、负载均衡和熔断配置、跨域配置

本文介绍了Spring Cloud Gateway作为微服务网关的作用,包括核心概念如路由、断言和过滤器。详细阐述了路由前缀处理、过滤器的类型与生命周期、全局和局部过滤器的实现,以及负载均衡和熔断配置。同时,讨论了跨域配置问题,并对比了Gateway与Feign的区别。
摘要由CSDN通过智能技术生成

SpringCloud简介

Spring Cloud是Spring旗下的项目之一
Spring Cloud并不是一个组件 而是许多组件的集合
其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能
协调了分布式环境中各个系统 并且为各类服务提供模板性的配置

其主要涉及的组件包括:

  • Eureka:注册中心
  • Zuul或Spring Cloud Gateway:服务网关
  • Ribbon:负载均衡
  • Feign:服务调用
  • Hystrix或Resilience4j:熔断器

【在本篇中 将介绍Spring Cloud Gateway网关】

Spring Cloud Gateway网关

在多个微服务之间为了避免直接暴露地址 增强服务的安全性 需要有一个网关 用于将客户的请求转发到不同的微服务

Spring Cloud Gateway是Spring基于Spring 5.0、 Spring Boot 2.0、Project Reactor等技术开发的网关服务 基于了Filter链提供网关基本功能:安全 监控/埋点 限流等 为微服务架构提供了简单 有效且统一的API路由管理方式

Spring Cloud Gateway是替代Netflix Zuul的一套解决方案 该组件的核心是一系列的过滤器 通过这些过滤器可以将客户端发送的请求转发(也称路由)到对应的微服务

Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器 通过隐藏微服务节点的IP端口信息从而加强安全保护
其本身也是一个微服务 因此 需要注册到Eureka服务注册中心

网关的核心功能是:过滤路由
在这里插入图片描述
不管是来自于PC端或移动端的请求 还是服务间的内部调用 一切对服务的请求都先经过网关 然后再由网关来实现鉴权 动态路由等操作
Gateway就是服务的统一入口 相当于一个大门

一、核心概念:

  • 路由(route)
    路由信息的组成:由一个ID 一个目的URL 一组断言工厂 一组Filter组成
    若路由断言为真 则说明请求URL和配置路由匹配
  • 断言(Predicate)
    Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于Http Request中的任何信息 比如请求头和参数
    简单来说 断言就是路由转发的判断条件
    目前SpringCloud Gateway支持多种方式 常见如:Path、Query、Method、Header等
  • 过滤器(Filter)
    这里的过滤器就是一个标准的Spring WebFilter过滤器
    Spring Cloud Gateway中的Filter分为两种类型的Filter 分别是Gateway Filter(当前请求的过滤器)和Global Filter(全局过滤器)
    过滤器Filter将会对请求和响应进行修改处理

二、使用步骤

添加Spring Cloud Gateway的依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

然后在启动类中用@EnableDiscoveryClient注解将其注册到Eureka客户端:

@SpringBootApplication
//  开启Eureka客户端的发现功能
@EnableDiscoveryClient
public class GatewayApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(GatewayApplication.class,args);
    }
}

在配置文件application.yml中配置路由规则:

server:
  port: 10010
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true

spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
          # 路由id 可任意写
        - id: user-service-route
          # 代理的服务地址(注意:是uri不是url)
          # uri: http://127.0.0.1:9091
          # 路由断言 匹配映射路径的条件(注意:Path的P要大写)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值