如何以反应式编程的方式思考并将传统的oops应用程序转换为反应式应用程序

How to think in reactive programming manner and convert traditional oops application into reactive application

在编写应用程序的传统方式中,我将应用程序划分为一组任务并按顺序执行它们。

  1. 从 Redis 获取给定规则组的规则列表
  2. 构造事实输入并触发规则。
  3. 通过命中多个规则计算请求的响应(规则组 A 可能取决于规则组 B 的结果)。
  4. 将响应发送回调用方。

如果我要使用 spring 网络流量反应方式实施上述步骤,我该如何实现?

  1. 我用过ReactiveRedis从redis中获取数据。 ReactiveRedisOperations.opsForValue().get(ruleGroupName) 在我们 subscribe() 之前不会 return 任何东西。但是 ReactiveRedisOperations.opsForValue().get(ruleGroupName).subscribe() 使处理线程具有反应性并且执行转到应用程序中的下一行而不等待订阅者执行。

  2. 因为我的下一步取决于 Redis 编辑的数据 return,所以我使用了 block() 选项让它等待。

在现实世界中,人们如何应对这样的情况?提前致谢。

PS:spring 网络流量和响应式编程的新手。

反应式编程使用方法组合和链接(运算符),而不是像在命令式编程中那样通过将逻辑步骤放在新的一行来分隔它们。

因此,一旦您获得 Flux<T>Mono<T>(这里是您的 Redis 规则),您需要链接运算符以声明方式构建您的处理步骤。

在内存中将每个输入元素 <T> 转换为单个对应元素 <R> 且没有延迟的步骤通常表示为 map(Function<T, R>) 并生成 Flux<R>.反过来,在上面链接更多的运算符。

将 1 个元素 <T> 转换为 N 个元素 <R> and/or 的步骤异步进行(即转换 returns a Flux<R> 每个T) 通常表示为 flatMap(Function<T, Publisher<R>>).

除此之外,Reactor 中还有丰富的专用运算符词汇表,您可以 explore

最后,您的目标是链接所有这些运算符来描述您的处理管道,这将是 Mono<RETURN_TYPE>Flux<RETURN_TYPE>。 webflux 中的 RETURN_TYPE 可以是 Spring 可以编组的业务类型,也可以是 Spring 面向响应的 类.

之一