你能指出任何书面或视频教程的春云启动网关的工作实例吗?使用session data-redis、Spring 2和可能的相关库(例如spring安全性)?
基本上,我想在微服务环境中使用服务器。我还想使用SpringBoot2.x,整个系统都是基于反应原理的。
我发现了很多例子,如何使用Redis速率限制器来设置spring云入门网关服务器。我有一个网关服务器的工作版本,但它没有使用基于Redis的会话管理。当我在图片中放置Redis for会话时,我将面临各种例外。因此,任何可行的例子都将不胜感激。
发布于 2022-05-22 14:04:37
正如您所提到的,Spring的关键是反应性。因此,通过推荐,交叉关注(过滤器)应该积极地实施.这是一个示例,还有我通常看到的人们实现的东西(安全性、Resiliency和路由器)。这个例子利用了自动配置的优势,意味着在需要redis的过滤器的情况下,它将搜索是否已经有一个Bean来管理redis连接,比如ReactiveRedisConnectionFactory (LettuceConnectionFactory - non,means )。
在会话管理方面,只需要:
@Configuration
@EnableRedisWebSession
在安全性方面,仅仅需要(其中ServerHttpSecurity是webflux的构建器,可以构建到您的需求: oauth2.0等):
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {...}
在限速器的情况下,只需要:
@Bean
public RedisRateLimiter redisRateLimiter() {
return new RedisRateLimiter(5, 7); // replenishRate, burstCapacity
}
@Bean
public RouteLocator appRouteLocator(RouteLocatorBuilder builder, RedisRateLimiter redisRateLimiter) {
... .requestRateLimiter(rl -> rl.setRateLimiter(redisRateLimiter)) // see example
}
最后,Spring安全和网关都处理过滤器(责任链),您也可以通过配置文件(properties/yaml)配置它。下面是一个非常抽象的图表过滤器及其与红色的关系。
举个例子,我在码头上使用了红宝石。这是对网关路由的呼叫跟踪。
1653227794.371458 [0 lua] "TIME"
1653227794.371488 [0 lua] "get" "request_rate_limiter.{user}.tokens"
1653227794.371550 [0 lua] "get" "request_rate_limiter.{user}.timestamp"
1653227794.371610 [0 lua] "setex" "request_rate_limiter.{user}.tokens" "2" "6"
1653227794.371653 [0 lua] "setex" "request_rate_limiter.{user}.timestamp" "2" "1653227794"
1653227802.789329 [0 172.17.0.1:37156] "EXISTS" "spring:session:sessions:64050a1e-eaf5-4b4f-9a82-12a008389dd9"
1653227802.792697 [0 172.17.0.1:37156] "HSET" "spring:session:sessions:64050a1e-eaf5-4b4f-9a82-12a008389dd9" "lastAccessedTime" "\xac\xed\x00\x05sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01\x80\xec\x0e/\xbc"
1653227802.794683 [0 172.17.0.1:37156] "EXPIRE" "spring:session:sessions:64050a1e-eaf5-4b4f-9a82-12a008389dd9" "1800"
https://stackoverflow.com/questions/53926560
复制相似问题