微服务 Gateway 的基本配置

时间:2022-07-26
本文章向大家介绍微服务 Gateway 的基本配置,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Gateway 有 3 大核心概念

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

所以我们在配置的时候一定要配置 路由断言

server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
        - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://localhost:8001   #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/get/**   #断言,路径相匹配的进行路由
        - id: payment_routh2
          uri: http://localhost:8001
          predicates:
            - Path=/payment/lb/**   #断言,路径相匹配的进行路由

eureka:
  instance:
    hostname: cloud-gateway-service
  client:
    service-url:
      register-with-eureka: true
      fetch-registry: true
      defaultZone: http://eureka7001.com:7001/eureka

uri 的协议为 lb,表示启用 Gateway 的负载均衡功能。


这样当我们访问 http://localhost:8001/payment/get/1 时其实和 http://localhost:9527/payment/get/1 是一样的,因为访问 9527 他会匹配路由然后转发到指定的地址。

相当于不暴露 8001 号端口,在 8001 外面套了一层 9527。


但是这样和我们的微服务调用关系不大,所以我们可以配置动态路由。

server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true  #开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
        - id: payment_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/get/**   #断言,路径相匹配的进行路由

        - id: payment_routh2
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/lb/**   #断言,路径相匹配的进行路由

如上所示,我们先是在配置文件中开启了 discovery-locator,他表示开启从注册中心动态创建路由的功能。

然后在 URI 处使用的微服务名 lb://cloud-payment-service,这样就能自动的进行转发,实现负载均衡。