Spring Cloud Gateway

本文介绍了如何在SpringCloudGateway中配置路由,包括依赖管理、WebFlux与SpringWebMVC包冲突、Netty容器的使用,以及如何通过YAML文件或Java配置实现路径匹配、服务发现和断言、过滤器等功能。
摘要由CSDN通过智能技术生成

微服务新网关Gateway

新建Gateway模块
pom.xml

<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>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
	<groupId>io.github.resilience4j</groupId>
	<artifactId>resilience4j-spring-boot2</artifactId>
	<version>0.13.2</version>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

特点:
1.Gateway依赖WebFlux,WebFlux和SpringWeb MVC 的包冲突,所以不能引入spring-boot-starter-web,只能打jar包运行。
2.Gateway只能支持Netty容器,所以不能引入tomcat或者Jetty。

使用配置文件配置路由
application.yml

# 配置启动端口
server:
  port: 3001

management:
  endpoints:
    web:
      # 暴露端点
      exposure:
        # 配置暴露的端点
        include: gateway

# Spring应用(微服务)名称
spring:
  application:
    name: gateway
  cloud:
    gateway:
      # 开始配置路径
      routes:
        # 路径匹配
        - id: fund
          # 转发URI
          uri: http://localhost:7001
          # 断言配置
          predicates:
            # Path断言
            - Path=/r4j/**
			

或者使用java文件配置路由
GatewayConfig.java

package com.spring.cloud.gateway.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;

@Configuration
public class GatewayConfig {
  @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes() //开启路由配置
                // 匹配路径
                .route(f -> f.path("/user/**") // route方法逻辑是一个断言,后续会论述
                        // 转发到具体的URI
                        .uri("http://localhost:6001"))
                // 创建
                .build();
    }
}

访问http://localhost:3001/r4j/user/9 或 http://localhost:3001/user/info/9 都可以访问到user模块

执行原理
关键组件
1.路由(route)由ID,目标URI,断言集合,过滤器组成,当断言判断为true时才会匹配到路由。
2.断言(predicate),用于判断请求头,Cookies或者请求类型,host,uri,参数名,远程地址,是否符合正则以及分配权重。。
3.过滤器(filter),内置了请求头,响应头,跳转,参数处理,响应状态,Hystrix熔断和限速器等21种。

上面路由到固定地址,我们可以基于服务发现路由。,
1.gateway模块注册到Eureka服务器。
2.按照约定,使用"lb://{service-id}"的格式发现服务。service-id 就是微服务名称。
application.yml的配置如下

# Spring应用(微服务)名称
spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: user-service
          # 客户端负载均衡路由
          uri: lb://user
          # 匹配路径
          predicates:
            - Path=/user/**
 #请求URL指向Eureka服务治理中心
eureka:
  client:
    serviceUrl:
      defaultZone : http://localhost:5001/eureka/,http://localhost:5002/eureka/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芊芸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值