Spring Cloud Gateway快速入门Demo

Spring Cloud Gateway快速入门Demo1 什么是 Spring Cloud Gateway Spring Cloud Gateway 是一个基于 Spring Framework 和 Spring Boot 构建的 API 网关服务

欢迎大家来到IT世界,在知识的湖畔探索吧!

1.什么是Spring Cloud Gateway?

Spring Cloud Gateway 是一个基于 Spring Framework 和 Spring Boot 构建的 API 网关服务。它提供了一种简单而有效的方式来路由请求、提供跨领域的关注点(如安全、监控/指标和弹性)以及其他功能。Spring Cloud Gateway 旨在提供一种简单而有效的方式来路由 API 请求,并提供一些常见的网关功能,如路径重写、负载均衡、限流、熔断等。

应用场景

  1. 请求路由:将客户端请求路由到不同的微服务。
  2. 安全性:在网关层实现身份验证和授权。
  3. 负载均衡:在多个服务实例之间分配请求。
  4. 限流:限制请求的速率以保护后端服务。
  5. 熔断和降级:在后端服务不可用时提供默认响应。
  6. 监控和日志:收集和分析请求数据。

2.环境准备

配置hosts

127.0.0.1 node1 127.0.0.1 node2

欢迎大家来到IT世界,在知识的湖畔探索吧!

进去目录

欢迎大家来到IT世界,在知识的湖畔探索吧!cd D:\IdeaProjects\springcloud-demo\eureka\eureka-server

执行命令

C:\Users\Dell\.jdks\jbr-17.0.9\bin\java.exe -jar target/eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=node1 C:\Users\Dell\.jdks\jbr-17.0.9\bin\java.exe -jar target/eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=node2

访问http://127.0.0.1:8761/

Spring Cloud Gateway快速入门Demo

3.代码工程

实验目标

  • 请求路由:当用户访问 /api/users 时,Spring Cloud Gateway 会将请求路由到用户服务。当访问 /api/orders 时,路由到订单服务。
  • 负载均衡:如果订单服务有多个实例,Spring Cloud Gateway 可以根据负载均衡策略将请求分发到不同的实例上。

Gateway

pom.xml

欢迎大家来到IT世界,在知识的湖畔探索吧!<?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"> <parent> <artifactId>spring-cloud-gateway</artifactId> <groupId>com.et</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>gateway</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> </project>

SpringCloudGatewayApplication.java

package com.et; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringCloudGatewayApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudGatewayApplication.class, args); } }

application.yml

server: port: 8080 spring: application: name: gateway cloud: gateway: discovery: locator: enabled: true routes: - id: user_service uri: http://localhost:8081 predicates: - Path=/api/users/ - id: order_service uri: lb://order-service predicates: - Path=/api/orders/ eureka: client: service-url: defaultZone: http://localhost:8761/eureka/

User

pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-gateway</artifactId> <groupId>com.et</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>users</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>

controller

package com.et; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/api/users") public String getUsers() { return "User list"; } }

UserServiceApplication.java

package com.et; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } }

application.yml

server: port: 8081

Order

pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-gateway</artifactId> <groupId>com.et</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>order</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> </project>

controller

package com.et; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class OrderController { @GetMapping("/api/orders") public String getOrders() { return "Order list"; } }

OrderServiceApplication

package com.et; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class OrderServiceApplication { public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); } }

application.yml

server: port: 0 #random port spring: application: name: order-service eureka: client: service-url: defaultZone: http://localhost:8761/eureka/

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springcloud-demo(Spring Cloud Contract )

4.测试

  1. 启动用户服务,提供 /api/users 端点。
  2. 启动多个订单服务实例,提供 /api/orders 端点。
  3. 启动 Spring Cloud Gateway。

启动这两个服务后,通过 Spring Cloud Gateway 访问 /api/users/api/orders,请求将被路由到相应的服务。

  • http://127.0.0.1:8080/api/orders
  • http://127.0.0.1:8080/api/users

5.引用

  • https://spring.io/projects/spring-cloud-gateway

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/88304.html

(0)
上一篇 2024年 11月 17日 下午8:45
下一篇 2024年 11月 17日 下午9:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信