SpringClound

主题

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>
<!--common-->
<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>
<!--nacos discovery-->
<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 #路由ID,要唯一,建议跟微服务名称一致
uri: lb://kk-service
predicates:
- Path=/kk/**,/search/** #根据URL的匹配规则路由到具体的服务
- 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 #路由ID,要唯一,建议跟微服务名称一致
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


SpringClound
http://example.com/2024/03/21/微服务/
作者
kangkang
发布于
2024年3月21日
许可协议