问题描述
考虑以下4行代码:
Mono<Void> result = personRepository.findByNameStartingWith("Alice")
.map(...)
.flatMap(...)
.subscriberContext()
虚构用例,希望您能立即映射到实际任务要求:
如何在上下文中添加“爱丽丝”,以便在.map()
之后,“爱丽丝”不再是Person.class
而是Cyborg.class
(假定不可逆转换),在{{ 1}}我可以访问原始的“爱丽丝” .flatMap()
。我们要比较Person.class
内部的“爱丽丝”人与“爱丽丝”机器人的力量,然后将它们都运送到月球上以建造殖民地。
- 我读过大约3次: https://projectreactor.io/docs/core/release/reference/#context
- 我在
.flatMap()
上读过十几篇文章 - 我查看了使用subscriberContext但仅用于跟踪上下文和MDM的同事代码,这些代码是在代码顶部的管道外部静态初始化的。
所以我要得出的结论是,其他名称被称为“上下文”,这是大多数在上述压倒性用例中不能使用的。
我必须坚持使用元组和包装器吗?或者我完全是个哑巴,有办法。我需要这个上下文以完全相反的方向进行工作:-),除非“这个”上下文不是我需要的上下文。
解决方法
我将等待Reactor开发人员的关注(或者,稍后,如果我是正确的话,请去GitHub提出概念命名错误的问题),但与此同时。我相信Reactor Context可以解决这个问题:
What is the efficient/proper way to flow multiple objects in reactor
但实际上提醒我们的是,反应式管道在某种程度上大面积封闭,以强制性方式向下传播,并接受来自外部的值,这是一个非常狭窄且有限的用例,被称为“上下文”,这会使更多的人迷惑。
, 您引用的帖子中的 Context
和subscriptionContext确实是一个相同的...
Context
的目标更多是将一些信息附加到给定的订阅。
之所以可行,是因为在订阅时,构造了Subscriber
链以“实现”处理,并且自然而然地将每个给定的运算符(或步骤)作为对其下游的引用,以便能够推送数据
因此,它也可以查询当前订阅Context
是什么的视图,因此是一种自上而下的方法。