一、SpringCloud Gateway介绍

该项目提供了一个用于在 Spring WebFlux 之上构建 API 网关的库。Spring Cloud Gateway 旨在提供一种简单而有效的方式来路由到 API 并为它们提供交叉关注点,例如:安全性、监控/指标和弹性。

特征

Spring Cloud Gateway 特性:

基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0

能够匹配任何请求属性的路由。

谓词和过滤器特定于路由。

断路器集成。

Spring Cloud DiscoveryClient 集成

易于编写谓词和过滤器

请求速率限制

路径重写

二、SpringCloud Gateway搭建

首先我们需要建2个服务,Eureka server、Gateway。

2.1、Eureka Server搭建

新建springboot项目neil-eureka-server。

在pom.xml里面添加Eureka和web的依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

配置文件application.yml

server:
  port: 8989

spring:
  application:
    name: neil-eureka-server

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8989/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    prefer-ip-address: true

springboot启动类里面添加@EnableEurekaServer注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@EnableEurekaServer
@SpringBootApplication
@RestController
public class NeilEurekaServerApplication {

	@RequestMapping("/get")
	public String get(){
		return "hello world";
	}

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

启动neil-eureka-server。

在浏览器地址栏输入机器ip加端口访问Eureka页面
http://127.0.0.1:8989/

请添加图片描述

2.2、gateway搭建

新建springboot项目neil-gateway-server。

在pom.xml里面添加Eureka和gateway的依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-gateway</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

配置文件application.yml

server:
  port: 8990
  servlet:
    context-path: /
spring:
  application:
    name: neil-gateway-server
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true   #开启Eureka服务发现
          lower-case-service-id: true
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8989/eureka/ #Eureka Server地址
  instance:
    prefer-ip-address: true


springboot启动类里面添加@EnableEurekaServer注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableEurekaClient
@SpringBootApplication
public class NeilGatewayServerApplication {

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

}

启动neil-gateway-server

请添加图片描述

2.3、测试

调用eureka服务上写的接口

http://localhost:8989/get

这个是直接调用eureka服务接口

请添加图片描述

然后通过gateway调用eureka接口

http://localhost:8990/neil-eureka-server/get

请添加图片描述

gateway调用其他服务的方式是

http://localhost:8990/服务名/接口

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐