SpringCloud——Gateway(介绍、快速入门、网关集群)

介绍

网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁。
Gateway是Spring官方提供的用来代替zuul的网关组件
核心逻辑:路由转发 + 执行过滤器链

三大核心概念

Route((重点 和 eureka 结合做动态路由))

路由信息的组成: 由一个 ID、一个目的 URL、一组断言工厂、一组 Filter 组成。 如果路由断言为真,说明请求 URL 和配置路由匹配。

Predicate(断言)(就是一个返回 bool 的表达式)

Filter(过滤) (重点)

一个标准的 Spring WebFilter。 Web 三大组件(servlet listener filter) mvc interceptor
Spring Cloud Gateway 中的 Filter 分为两种类型的 Filter,分别是 Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改处理。
一个是针对某一个路由(路径)的 filter 对某一个接口做限流
一个是针对全局的 filter token ip 黑名单

Nginx与Gateway区别

SpringCloud——Gateway(介绍、快速入门、网关集群)_第1张图片

快速入门

路由

SpringCloud——Gateway(介绍、快速入门、网关集群)_第2张图片
1.创建一个Maven项目,之后创建一个Spring Boot项目,添加web依赖
SpringCloud——Gateway(介绍、快速入门、网关集群)_第3张图片
SpringCloud——Gateway(介绍、快速入门、网关集群)_第4张图片
写properties文件,修改启动类名称

# 应用名称
spring.application.name=02-login-service
# 应用服务 WEB 访问端口
server.port=8081

SpringCloud——Gateway(介绍、快速入门、网关集群)_第5张图片
写一个controller

@RestController
public class LoginController {
    @GetMapping("doLogin")
    public String doLogin(String name,String pwd){
        System.out.println(name);
        System.out.println(pwd);
        //token
        String token = UUID.randomUUID().toString();
        return token;
    }
}

2.创建gateway,添加gateway依赖,注意不可以选择web依赖,web默认是tomcat服务器,gateway默认是netty服务器
在这里插入图片描述
修改spring boot版本号,修改启动类名称
SpringCloud——Gateway(介绍、快速入门、网关集群)_第6张图片
SpringCloud——Gateway(介绍、快速入门、网关集群)_第7张图片
修改ym文件

server:
  port: 80 # 网关一般是80
spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 只要加了依赖默认开启
          routes:
            - id: login-service-route # 路由id,保持唯一
              uri: http://localhost:8081 # uri同一资源定位符
              predicates:
                - Path=/doLogin # 匹配规则,只要路径匹配上/doLogin,就会往uri转发,并且将路径带上

这样配置,访问80下的/doLogin,会转到8081下的/doLogin
测试:
SpringCloud——Gateway(介绍、快速入门、网关集群)_第8张图片
SpringCloud——Gateway(介绍、快速入门、网关集群)_第9张图片
SpringCloud——Gateway(介绍、快速入门、网关集群)_第10张图片

集群(nginx)

nginx 拖两个tomcat
upstream www.gateway.com{
server ip:port;
server ip:prot;
}

server{
listen 8080;
server_name loaclhost

localtion/{
proxy_pass www.gateway.com;
}
}

代码方式的路由

创建一个config类,添加config的注解

@Configuration
public class RouteConfig {

}

去spring cloud官网查看gateway
https://spring.io/projects/spring-cloud-gateway
模仿代码模式,写一个访问b站的网关

@Configuration
public class RouteConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("guochaung-id",r -> r.path("/anime").uri("https://www.bilibili.com"))
                .route("movie-id",r -> r.path("/movie").uri("https://www.bilibili.com"))
                .route("variety-id",r -> r.path("/variety").uri("https://www.bilibili.com"))
                .build();
    }
}

测试:
SpringCloud——Gateway(介绍、快速入门、网关集群)_第11张图片
若在https://www.bilibili.com后面添加好/movie,则不会将前面的在往后面拼接

动态路由

一个服务里面有很多路径(不做负载均衡)

可以给路径加一个前缀

server:
  port: 80 # 网关一般是80
spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      enabled: true # 只要加了依赖默认开启
      routes:
        - id: login-service-route # 路由id,保持唯一
          uri: http://localhost:8081 # uri同一资源定位符
          predicates:
            - Path=/service/** # 匹配规则,只要路径匹配上/doLogin,就往uri转发,并且将路径带上

这样就可以随意更改访问的路径,最后都会带着service/path一起拼接到http://localhost:8081后面去

动态路由(可使用负载均衡)

需要结合注册发现中心,思路是将gateway也注册到注册中心,这样就可以获取所有服务的名称,在访问时带上服务名称实现负载均衡
注意:使用可负载均衡的动态路由,因为gateway会从Eureka中服务名等信息,所以不需要对访问路径进行配置,当然配置上也不会冲突。
SpringCloud——Gateway(介绍、快速入门、网关集群)_第12张图片
1.修改gateway
首先给网关添加Eureka依赖,修改对应版本号

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

在yml中配置eureka,并开启动态路由

server:
  port: 80 # 网关一般是80
spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      enabled: true # 只要加了依赖默认开启
      discovery:
        locator:
          enabled: true # 开启动态路由
          lower-case-service-id: true # 开启小写
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

在启动类中添加开启Eureka客户端注解

@EnableEurekaClient

2.修改login-service
在pom中添加eureka依赖,cloud版本控制,并修改对应版本号

<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-dependenciesartifactId>
            <version>${spring-cloud.version}version>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>

配置yml,启动类中添加开启Eureka客户端注解

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: 02-login-service
server:
  port: 8081

测试(注意地址中间加应用名称):
SpringCloud——Gateway(介绍、快速入门、网关集群)_第13张图片
注:不注册,只修改配置文件也可以实现
SpringCloud——Gateway(介绍、快速入门、网关集群)_第14张图片

你可能感兴趣的:(SpringCloud,spring,cloud,gateway,java)