文章目录
- 前言
- 一、新建项目
-
- [1. 项目结构](#1. 项目结构)
- [2. 引入依赖](#2. 引入依赖)
- [3. 启动类](#3. 启动类)
- [4. 基本配置](#4. 基本配置)
- 二、新建配置
- 三、新建服务
-
- [1. 提供者](#1. 提供者)
- [2. 消费者](#2. 消费者)
- 四、单元测试
-
- [1. 启动网关服务](#1. 启动网关服务)
- [2. 提供者](#2. 提供者)
- [3. 消费者](#3. 消费者)
- 总结
前言
Spring Cloud Gateway是一个基于Spring Framework 5、Spring Boot 2和Project Reactor等技术构建的API网关服务器,旨在为微服务架构提供简单且有效的路由管理方式和一系列网关功能。
一、新建项目
1. 项目结构
2. 引入依赖
nacos相关配置我定义在了父工程中,前面也有过介绍,这里不再赘述
xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
网关不能包含spring-boot-starter-web
模块
3. 启动类
java
package org.example.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* Create by zjg on 2024/7/21
*/
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
4. 基本配置
yml
server:
port: 8888
spring:
application:
name: gateway-service
cloud:
nacos:
config:
file-extension: yaml
server-addr: ${NACOS_SERVER_ADDR}
namespace: ${NACOS_NAMESPACE}
username: ${NACOS_USERNAME}
password: ${NACOS_PASSWORD}
shared-configs[0]:
data-id: base-discovery.yaml
group: DEFAULT_GROUP
refresh: true
二、新建配置
我们通过网关来为提供者和消费者配置路由规则信息
yml
spring:
cloud:
gateway:
routes[0]:
id: provider-service
uri: lb://provider-service
predicates[0]:
name: Path
args[pattern]: /provider/**
routes[1]:
id: consumer-service
uri: lb://consumer-service
predicates[0]:
name: Path
args[pattern]: /consumer/**
三、新建服务
这里我们需要在提供者和消费者提供一个新的服务供测试使用
1. 提供者
java
package org.example.nacos.provider.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Create by zjg on 2024/7/21
*/
@RestController
@RequestMapping("/provider/")
public class HelloController {
@RequestMapping("hello")
public String hello(){
return "hello provider";
}
}
2. 消费者
java
package org.example.nacos.consumer.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Create by zjg on 2024/7/21
*/
@RestController
@RequestMapping("/consumer/")
public class HelloController {
@RequestMapping("hello")
public String hello(){
return "hello consumer";
}
}
接着我们再启动提供者和消费者服务。
四、单元测试
1. 启动网关服务
这里我们启动
GatewayApplication
服务
2. 提供者
3. 消费者
总结
通过整合Spring Cloud Gateway统一后端服务的入口,在网关层进行统一的安全认证,降低微服务系统的复杂性。