What is Spring Cloud Gateway

What is Spring Cloud Gateway

Spring Spring Cloud Gateway is the official gateway based on technology developed by Spring 5.0, Spring Boot 2.0 and Project Reactor, etc., Spring Cloud Gateway is designed to provide a simple and effective unified API services architecture for micro routing management. Spring Cloud Gateway as an ecosystem Spring Cloud gateway, the goal is to replace Netflix Zuul , which not only provides a unified routing, and provides the basic functions of gateway-based approach Filter chain, such as: security, monitoring / Buried, and limit streams.

img

# The Spring Cloud Gateway functional characteristics

  • Based on Spring Framework 5, Project Reactor and Spring Boot 2.0
  • Dynamic Routing
  • Predicates and Filters act on a specific route
  • Integrated circuit breaker Hystrix
  • 集成 Spring Cloud DiscoveryClient
  • Filters are easy to write and Predicates
  • Limiting
  • Path Rewrite

# The Spring Cloud Gateway engineering processes

img

The client makes a request to Spring Cloud Gateway. And then find the matches the request of the routing Gateway Handler Mapping, send it to the Gateway Web Handler. Handler then through the specified filter chain to send a request to the service we actually execute business logic and then returns.

Separated by a dashed line between the filter because the filter may (before sending a proxy request pre) or after ( post) execute business logic.

#POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.snake</groupId>
        <artifactId>hello-spring-cloud-alibaba-dependencies</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../hello-spring-cloud-alibaba-dependencies/pom.xml</relativePath>
    </parent>

    <artifactId>hello-spring-cloud-gateway</artifactId>
    <packaging>jar</packaging>

    <name>hello-spring-cloud-gateway</name>
    <url>http://www.snake.com</url>
    <inceptionYear>2018-Now</inceptionYear>

    <dependencies>
        <!-- Spring Boot Begin -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->

        <!-- Spring Cloud Begin -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!-- Spring Cloud End -->

        <!-- Commons Begin -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <!-- Commons Begin -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.funtl.hello.spring.cloud.gateway.GatewayApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

The main increases org.springframework.cloud:spring-cloud-starter-gatewaydependence

# Special attention

  • Spring Cloud Gateway is not used as a Web server, but use WebFlux as a server , Gateway project has relied starter-webflux, so here do not rely starter-web
  • Since the filter functions Servlet still need support, so there is also need to rely on javax.servlet:javax.servlet-api

#Application

package com.snake.hello.spring.cloud.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

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

# application.yml

spring:
  application:
    # 应用名称
    name: spring-gateway
  cloud:
    # 使用 Naoos 作为服务注册发现
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    # 使用 Sentinel 作为熔断器
    sentinel:
      transport:
        port: 8721
        dashboard: localhost:8080
    # 路由网关配置
    gateway:
      # 设置与服务注册发现组件结合,这样可以采用服务名的路由策略
      discovery:
        locator:
          enabled: true
      # 配置路由规则
      routes:
        # 采用自定义路由 ID(有固定用法,不同的 id 有不同的功能,详见:https://cloud.spring.io/spring-cloud-gateway/2.0.x/single/spring-cloud-gateway.html#gateway-route-filters)
        - id: NACOS-CONSUMER
          # 采用 LoadBalanceClient 方式请求,以 lb:// 开头,后面的是注册在 Nacos 上的服务名
          uri: lb://nacos-consumer
          # Predicate 翻译过来是“谓词”的意思,必须,主要作用是匹配用户的请求,有很多种用法
          predicates:
            # Method 方法谓词,这里是匹配 GET 和 POST 请求
            - Method=GET,POST
        - id: NACOS-CONSUMER-FEIGN
          uri: lb://nacos-consumer-feign
          predicates:
            - Method=GET,POST

server:
  port: 9000

# 目前无效
feign:
  sentinel:
    enabled: true

# 目前无效
management:
  endpoints:
    web:
      exposure:
        include: "*"

# 配置日志级别,方别调试
logging:
  level:
    org.springframework.cloud.gateway: debug

Note: Please read the comments carefully

# Test Access

And then click Run Nacos NacosProviderApplicationservice, NacosConsumerApplication, NacosConsumerFeignApplication, ,GatewayApplication

Open your browser and visit: http: // localhost: 9000 / nacos-consumer / echo / app / name browser displays

Hello Nacos Discovery nacos-consumer i am from port 8082

Open your browser and visit: http: // localhost: 9000 / nacos-consumer-feign / echo / hi browser displays

Hello Nacos Discovery Hi Feign i am from port 8082

Note: The request method is http: // gateway router IP: Routing Gateway Port / service name / * *

At this point Description Spring Cloud Gateway Routing functions are configured

Guess you like

Origin www.cnblogs.com/snake107/p/11920845.html