在本教程中,我们将学习如何使用SpringCloudGateway库在我们的微服务项目中设置API网关。
Spring Cloud Gateway提供了一个库,用于在Spring WebFlux之上构建API网关。Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到API,并为API提供横切关注点,如安全性、监控/度量和弹性。
Spring Cloud Gateway有三个重要部分:
路线− 这些是网关的构建块,其中包含请求要转发到的URL以及应用于传入请求的谓词和筛选器
谓词− 这些是一组标准,应该与要转发到内部微服务的传入请求相匹配。例如,只有当传入URL包含该路径时,路径谓词才会转发请求
过滤器− 在将请求发送到内部微服务或在响应客户端之前,这些服务充当您可以修改传入请求的位置。
要了解更多信息,请阅读Spring Cloud Gateway documentation。
请参阅以下教程以创建部门服务和用户服务微服务,并配置Netflix Eureka service Registry:
Spring Boot微服务-基于Spring Cloud Netflix Eureka的服务注册表
让我们使用spring initializr创建一个Spring引导项目。
使用spring initializr创建spring boot应用程序时,请参阅以下屏幕截图以输入详细信息:
单击Generate按钮以zip文件的形式下载Spring引导项目。解压缩zip文件并在IntelliJIDEA中导入Spring引导项目。
这是彩球。供您参考的xml文件:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>nt.javaguides</groupId>
<artifactId>api-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>api-gateway</name>
<description>api-gateway</description>
<properties>
<java.version>17</java.version>
<spring-cloud.version>2021.0.4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
现在我们有了API网关应用程序中需要的所有依赖项。现在,让我们配置Routes和其他特定于API网关的配置,以便在我们的项目中使用
@EnableEurekaClient
注解使Spring Boot应用程序充当Eureka客户端。
package nt.javaguides.apigateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
不要错过这一步,您必须将API网关配置为该项目的Eureka客户端。否则,您无法使用发现功能从服务注册表中识别正确的API。
要将Spring Boot应用程序注册到Eureka Server,我们需要在application.properties
文件中添加以下配置,并在配置中指定Eureka服务器URL。
spring.application.name=API-GATEWAY
server.port=9191
eureka.instance.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
management.endpoints.web.exposure.include=*
现在,您可能想知道API网关如何正确地知道微服务的主机名或IP和端口。
当客户端向API网关发送请求时,它将使用服务注册表来通信和路由请求,从而发现正确的服务IP和PORT。
让我们使用属性配置路由:
spring.application.name=API-GATEWAY
server.port=9191
eureka.instance.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
management.endpoints.web.exposure.include=*
spring.cloud.gateway.routes[0].id=USER-SERVICE
spring.cloud.gateway.routes[0].uri=lb://USER-SERVICE
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/users/**
spring.cloud.gateway.routes[1].id=DEPARTMENT-SERVICE
spring.cloud.gateway.routes[1].uri=lb://DEPARTMENT-SERVICE
spring.cloud.gateway.routes[1].predicates[0]=Path=/api/departments/**
spring.cloud.gateway.routes[2].id=DEPARTMENT-SERVICE
spring.cloud.gateway.routes[2].uri=lb://DEPARTMENT-SERVICE
spring.cloud.gateway.routes[2].predicates[0]=Path=/message/**
我们为API网关路由设置了哪些属性?
港口运行的部门服务:http://localhost:8080'
端口上运行的用户服务:http://localhost:8081
端口上运行的API网关服务:http://localhost:9191
端口上运行的Service Registry服务:http://localhost:8761
转到浏览器并在新选项卡中点击此链接:http://localhost:8761
请注意,我们使用API网关服务端口(9191)来调用部门服务API(端口8080)
港口运行的部门服务:http://localhost:8080
API网关服务在端口上运行:http://localhost:9191
API网关将请求从http://localhost:9191/api/departments/1路由到http://localhost:8080/api/departments/1
注意,我们使用API网关服务端口(9191)来调用用户服务API端口(8081)。
端口上运行的用户服务:http://localhost:8081
端口上运行的API网关服务:http://localhost:9191
API网关将请求从http://localhost:9191/api/users/1路由到http://localhost:8081/api/users/1
在本教程中,我们学习了如何使用Spring C在我们的微服务项目中设置API网关
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2022/10/spring-boot-microservices-spring-cloud-api-gateway.html
内容来源于网络,如有侵权,请联系作者删除!