当前位置:   article > 正文

10.使用gateway作为服务网关的简单配置_gateway网关配置

gateway网关配置

gateway 简介

Spring Cloud Gateway是Spring Cloud体系的第二代网关组件,基于Spring 5.0的新特性WebFlux进行开发,底层网络通信框架使用的是Netty,所以其吞吐量高、性能强劲,未来将会取代第一代的网关组件Zuul。Spring Cloud Gateway可以通过服务发现组件自动转发请求,默认集成了Ribbon做负载均衡,以及默认使用Hystrix对网关进行保护,当然也可以选择其他的容错组件,例如Sentinel

优点:

  • 性能强劲:是第一代网关Zuul的1.6倍
  • 功能强大:内置了很多实用的功能,例如转发、监控、限流等
  • 设计优雅,容易扩展

缺点:

  • 其实现依赖Netty与WebFlux,不是传统的Servlet编程模型,有一定的学习成本
  • 不能在Servlet容器下工作,也不能构建成WAR包,即不能将其部署在Tomcat、Jetty等Servlet容器里,只能打成jar包执行
  • 不支持Spring Boot 1.x,需2.0及更高的版本



1. gateway 的简单配置使用

1. 入门配置

需要4步:

  • 新建model
  • 修改pom文件
  • 配置yml文件
  • 启动类

1. 新建Model

这个没什么好说的了,新建一个普通的maven的model 即可

2. 修改pom文件

pom文件是基于父子工程来做的,微服务一般都是基于父子工程来做的。
在pom文件中添加 gateway 的依赖

注意: 不要在pom中添加 spring-boot-starter-web 的依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

版本号已经在父项目中规定了:参见:https://blog.csdn.net/weixin_43852058/article/details/110670923

3. 配置yml文件

在yml文件中配置 gateway 的 路由规则,可以路由到哪些地址等信息

spring:
  cloud:
    gateway:
      routes:
        - id: shop-product            # 路由的唯一标识
          uri: http://localhost:8081  # 如果断言成功,将要转发去的地址
          order: 0                    # 优先级,越小优先级越高
          predicates:                 # 断言,满足所有断言,才会进行转发
            - Path=/product/**        # 注意:这是使用= 不是:
        - id: shop-order
          uri: http://localhost:8091
          order: 0
          predicates:
            - Path=/order/**

server:
  # 指定服务器的端口号
  port: 9000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4. 启动类

maven项目没有springboot的启动类,需要自己新建,新建的时候注意以下,至少先建立两层包目录,防止出现一些意料之外的问题,养成习惯。

@SpringBootApplication
public class GatewayApp {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApp.class, args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5. 测试是否成功

做完上边几步就已经配置完成了,下边在浏览器中输入网关的地址,加上想要访问的服务的路径,就可以访问到想要访问的资源了。
在这里插入图片描述
这里应该已经可以感受到网关的作用了,网关就是帮你找到你想要的资源。



2. 结合注册中心使用gateway

在yml中直接写死绑定的uri当然是不好的方法,而且服务间的通信如果多了,使用gateway的时候你就需要记住非常多的地址,端口,使用不太方便,这时候可以配合注册中心一起使用

配合注册中心使用需要两步就可以搞定:

  • 修改pom文件
  • 修改yml文件

1. pom文件

在pom中引入注册中心的依赖,这里以 eureka 为例,nacos同理

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

2. yml文件

在yml文件中修改配置,配置注册中心,在转发给远程服务的时候,地址需要进行改变。

# 配置 eureka 注册中心
eureka:
  client:
    register-with-eureka: false  	# 不在注册中心注册
    fetch-registry: true 			# 需要从注册中心拉取服务
    service-url:					# 注册中心的地址
      defaultZone: http://localhost:7001/eureka/

spring:
  cloud:
    gateway:
      routes:
        - id: shop-product            # 路由的唯一标识
          # 这里的地址需要使用 lb://服务名的方式进行转发
          uri: lb://shop-product        # 如果断言成功,将要转发去的地址
          order: 0                    # 优先级,越小优先级越高
          predicates:                 # 断言,满足所有断言,才会进行转发
            - Path=/product/**        # 注意:这是使用= 不是:
        - id: shop-order
          uri: lb://shop-order
          order: 0
          predicates:
            - Path=/order/**
  application:
    name: shop-gateway
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

注意: 在配置gateway的时候,uri的地址需要使用 lb://服务名 的方式进行配置。
lb 是 LoadBalance 的意思,也就是负载均衡的意思。

使用网关模式的话,网关是带有负载均衡的(Eureka 和 nacos 集成了Ribbon)
Ribbon的简单使用参考:4. 使用Ribbon实现客户端负载均衡


3. 测试是否成功

在浏览器中输入 http://网关ip:网关端口/资源路径 进行测试,如果显示出目标资源,就是配置成功
在这里插入图片描述

3. 简化版配置

有人说,微服务多的话,我这yml里边岂不是要配置很多东西,有点烦人啊,gateway还提供一种简化版的配置,可以在yml中不配置route。但是在访问的时候,对url路径有一定的要求。
具体是什么要求,到后边再说,先看配置吧

1. yml 文件

在yml中开启自动定位

spring:
  application:
    name: shop-gateway
  cloud:
    gateway:
      discovery:
        # 定位器
        locator:
          enabled: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2. 测试是否成功

在浏览器中输入:http://网关ip:网关端口/服务名/资源(接口)路径 进行访问
在这里插入图片描述

注意: 使用这种方式的时候,请求路径一定要遵循这个规则: http://网关ip:网关端口/服务名/资源(接口)路径

再次注意: 使用Eureka 做完注册中心的时候,注册的服务名称会默认转换为 全大写,使用的时候一定要注意。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/830906
推荐阅读
相关标签
  

闽ICP备14008679号