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

文章目录

  • gateway 简介
  • 1. gateway 的简单配置使用
    • 1. 入门配置
      • 1. 新建Model
      • 2. 修改pom文件
      • 3. 配置yml文件
      • 4. 启动类
      • 5. 测试是否成功
    • 2. 结合注册中心使用gateway
      • 1. pom文件
      • 2. yml文件
      • 3. 测试是否成功
    • 3. 简化版配置
      • 1. yml 文件
      • 2. 测试是否成功

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.cloudgroupId>
    <artifactId>spring-cloud-starter-gatewayartifactId>
dependency>

版本号已经在父项目中规定了:参见: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

4. 启动类

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

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

5. 测试是否成功

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



2. 结合注册中心使用gateway

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

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

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

1. pom文件

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

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>

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

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

使用网关模式的话,网关是带有负载均衡的(Eureka 和 nacos 集成了Ribbon)


3. 测试是否成功

在浏览器中输入 http://网关ip:网关端口/资源路径 进行测试,如果显示出目标资源,就是配置成功
10.使用gateway作为服务网关的简单配置_第2张图片

3. 简化版配置

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

1. yml 文件

在yml中开启自动定位

spring:
  application:
    name: shop-gateway
  cloud:
    gateway:
      discovery:
        # 定位器
        locator:
          enabled: true

2. 测试是否成功

在浏览器中输入:http://网关ip:网关端口/服务名/资源(接口)路径 进行访问
10.使用gateway作为服务网关的简单配置_第3张图片

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

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

你可能感兴趣的:(学习笔记,#,微服务,网关,java)