Spring Cloud第七站GateWay

GateWay简介

  GateWay是微服务架构下的服务网关。它的诞生背景是Netflix公司,对于推出的zuul 1.x版本不满意,即将推出zuul 2.x,但是2.x的版本又迟迟未完工的情况下。于是Spring Cloud开源社区推出了GateWay来代替zuul 1.x。
  Spring Cloud具有以下的特性:

  1. 基于Spring Framework 5,Project Reactor和Spring Boot 2.x进行构建的。
  2. 动态路由:能够匹配任何请求路由
  3. 可以对路由制定Predicate(断言)和Filter(过滤)
  4. 集成Hystrix的断路器功能
  5. 集成Spring Cloud服务发现功能
  6. 请求限流、支持路径重写

GateWay三大核心概念

  • Route(路由)
      路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如断言为true则匹配该路由。
  • Predicate(断言)
      参考的是Java8的java.util.function.Predicate
    开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。
  • Filter(过滤)
      指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

GateWay的配置使用

  1. 构建GateWay微服务模块,引入GateWay所需要的依赖
		<dependency>#如未使用eureka请忽略该项依赖
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>#引入gateway所需依赖,并剔除掉web依赖
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  1. yml文件中配置GateWay所需要的配置
server:
  port: 9527
  servlet:
    context-path: /
spring:
  application:
    name: gateway	#微服务名称
  cloud:
    gateway:
      routes:
        - id: payment_routh #payment_routh    #路由的ID,没有固定规则但要求唯一,简易配合服务名
          uri: http://localhost:8001         #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/getPayment/**          #断言,路径相匹配的进行路由

  1. 分别启动8001服务端与gateway配置的9527端口
    访问配置的8001端口
    在这里插入图片描述
    若gateway配置成功,则可以通过gateway的yml文件中配置的可以通过9527端口访问到/payment/getPayment/** 下的配置
    在这里插入图片描述
    注意:gateway项目启动过成功,若出现微服务启动成功,但后台报了微服务配置相关错误,请不要忽略报错信息,否则可能会导致网关配置失败!!!

使用GateWay配置外网链接

参考官网配置:https://spring.io/projects/spring-cloud-gateway

  1. 创建一个配置类GateWayConfig
  2. 配置相关Bean
@Configuration
public class GateWayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes().route("gateway-route-1",    //路由名称,随便取,但是具体开发环境起的名称应该有意义
                r -> r.path("/cloudGateWay").       //配置本地访问路径
                        uri("https://spring.io/projects/spring-cloud-gateway")).    //配置远程代理页面
                build();
    }
}

  1. 测试
     如此我们就可以通过http://localhost:9527/cloudGateWay访问到spring官网的gateway相关的说明Api

 以上的配置中,uri被写死了,会造成微服务环境下,扩容的困难

配置动态路由

修改yml配置文件

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: payment_routh #payment_routh    #路由的ID,没有固定规则但要求唯一,简易配合服务名
          #uri: http://localhost:8001         #匹配后提供服务的路由地址
          uri: lb://PROVIDER-PAYMENT			#将uri修改为为微服务模块名称,lb意思为负载均衡
          predicates:
            - Path=/payment/getPayment/**          #断言,路径相匹配的进行路由
      discovery: #新增
        locator:
          enabled: true

启动多个PROVIDER-PAYMENT 模块,就会发现通过9527端口访问的接口,在8001与8002之间切换
在这里插入图片描述

断言相关配置信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值