springboot整合springboot alibaba gateway 详细介绍
时间: 2023-10-23 08:10:34 浏览: 121
springboot整合
SpringBoot Alibaba Gateway是一个基于SpringBoot和Alibaba的API网关,它提供了一些强大的特性,如路由转发、负载均衡、限流、熔断、安全认证等,可以帮助开发者快速构建可靠的微服务架构。
下面详细介绍一下SpringBoot Alibaba Gateway的使用方法:
1. 添加依赖
在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-gateway</artifactId>
</dependency>
```
2. 配置路由规则
在application.yml文件中添加路由规则:
```yaml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- StripPrefix=1
```
以上配置表示,将所有以/user开头的请求路由到名为user-service的服务上,并去除请求路径中的第一个路径段。
3. 配置限流
在application.yml文件中添加限流配置:
```yaml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- StripPrefix=1
- name: RequestRateLimiter
args:
key-resolver: "#{@userKeyResolver}"
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
- id: product-service
uri: lb://product-service
predicates:
- Path=/product/**
filters:
- StripPrefix=1
- name: RequestRateLimiter
args:
key-resolver: "#{@productKeyResolver}"
redis-rate-limiter.replenishRate: 5
redis-rate-limiter.burstCapacity: 10
```
以上配置表示,对于/user/**路径下的请求,采用RequestRateLimiter限流策略,每秒最多处理10个请求,最大容量为20;对于/product/**路径下的请求,采用同样的限流策略,但每秒最多处理5个请求,最大容量为10。
4. 配置熔断
在application.yml文件中添加熔断配置:
```yaml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- StripPrefix=1
- name: Hystrix
args:
name: user-hystrix
fallbackUri: forward:/fallback/user
- id: product-service
uri: lb://product-service
predicates:
- Path=/product/**
filters:
- StripPrefix=1
- name: Hystrix
args:
name: product-hystrix
fallbackUri: forward:/fallback/product
```
以上配置表示,对于/user/**路径下的请求,采用Hystrix熔断策略,当user-service服务出现故障时,转发到/fallback/user路径;对于/product/**路径下的请求,采用同样的熔断策略,当product-service服务出现故障时,转发到/fallback/product路径。
5. 配置安全认证
在application.yml文件中添加安全认证配置:
```yaml
spring:
cloud:
gateway:
security:
enabled: true
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- StripPrefix=1
- name: Hystrix
args:
name: user-hystrix
fallbackUri: forward:/fallback/user
- name: Auth
args:
auth-header-name: Authorization
regex: Bearer\\s(.+)
replacement: $1
- id: product-service
uri: lb://product-service
predicates:
- Path=/product/**
filters:
- StripPrefix=1
- name: Hystrix
args:
name: product-hystrix
fallbackUri: forward:/fallback/product
- name: Auth
args:
auth-header-name: Authorization
regex: Bearer\\s(.+)
replacement: $1
```
以上配置表示,启用安全认证,对于/user/**和/product/**路径下的请求,采用Auth认证策略,从请求头中获取Authorization字段,并将其转换为token,以便进行后续的认证和鉴权操作。
6. 编写过滤器
在代码中编写过滤器:
```java
@Component
public class TokenFilter implements GatewayFilter, Ordered {
private static final String TOKEN_KEY = "token";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst(TOKEN_KEY);
if (StringUtils.isBlank(token)) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -1;
}
}
```
以上代码表示,对于所有请求,在请求参数中检查是否包含名为token的参数,如果不存在或为空,则返回401错误,否则继续执行后续操作。
7. 注册过滤器
在代码中注册过滤器:
```java
@Configuration
public class GatewayConfiguration {
@Autowired
private TokenFilter tokenFilter;
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("user-service", r -> r.path("/user/**")
.filters(f -> f.stripPrefix(1).filter(tokenFilter))
.uri("http://user-service"))
.route("product-service", r -> r.path("/product/**")
.filters(f -> f.stripPrefix(1).filter(tokenFilter))
.uri("http://product-service"))
.build();
}
}
```
以上代码表示,在路由配置中注册TokenFilter过滤器,对于/user/**和/product/**路径下的请求,先进行TokenFilter过滤器的处理,再转发到对应的服务上。
以上就是SpringBoot Alibaba Gateway的详细介绍,通过以上步骤,可以快速构建一个可靠的API网关,实现路由转发、限流、熔断、安全认证等强大的特性。
阅读全文