主题
x. 网关
x.1 什么是网关?
顾明思议,网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。

x.2.快速入门
- 创建网关微服务
- 引入SpringCloudGateway、NacosDiscovery依赖
- 编写启动类
- 配置网关路由
x.2.1 创建网关微服务
创建Module

1.2.2 导入相关依赖
引入SpringCloudGateway、NacosDiscovery依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <dependencies> <dependency> <groupId>com.kangkang</groupId> <artifactId>hm-common</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
|
1.2.3 编写启动类
1 2 3 4 5 6 7 8 9 10 11 12
| package com.kangkang.gateway;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } }
|
1.2.4 配置网关路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| server: port: 8080
spring: application: name: kangkang-gateway cloud: nacos: discovery: server-addr: 192.168.128.100:8848 //nacos服务器地址:端口 gateway: routes: - id: kk-service uri: lb://kk-service predicates: - Path=/kk/**,/search/** - id: cart-service uri: lb://cart-service predicates: - Path=/carts/** - id: pay-service uri: lb://pay-service predicates: - Path=/pay-orders/** - id: trade-service uri: lb://trade-service predicates: - Path=/orders/** - id: user-service uri: lb://user-service predicates: - Path=/addresses/**,/users/**
|
1.3 配置全局过滤器
1.3.1 创建过滤器类 AutoGlobalFilter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package com.kangkang.gateway.filters;
import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;
@Component public class AutoGlobalFilter implements GlobalFilter, Ordered {
@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { System.out.println("AutoGlobalFilter全局过滤器生效了!"); return chain.filter(exchange); } @Override public int getOrder() { return 0; } }
|
1.3.2 (暂未编写过滤逻辑) 通过访问购物车测试过滤器
localhost:8080/carts
排序为0 生效中
1 2 3 4 5 6 7
| AutoGlobalFilter全局过滤器生效了! PrintAnyGatewayFilterFactory生效了 kk:kk666 k:k888 2024-03-21 11:33:11.731 INFO 14992 --- [ent-executor-15] com.alibaba.nacos.common.remote.client : [a5a8dc66-3b0d-489d-a4c4-7c99412d58bc] Receive server push request, request = NotifySubscriberRequest, requestId = 23 2024-03-21 11:33:11.733 INFO 14992 --- [ent-executor-15] com.alibaba.nacos.common.remote.client : [a5a8dc66-3b0d-489d-a4c4-7c99412d58bc] Ack server push request, request = NotifySubscriberRequest, requestId = 23
|