如何解决使用反应堆上下文获取下层链的结果
我有这个豆:
@Bean("reactiveNeo4jDatabaseNameProvider")
public ReactiveDatabaseSelectionProvider reactiveDatabaseSelectionProvider() {
log.info("Database selection step");
return () -> getRealmFromContext()
.flatMap(realmId -> {
Flux<String> stringFlux = translateRealmTodbname(realmId);
Mono<DatabaseSelection> next = stringFlux.map(DatabaseSelection::byName).next();
return next;
}
)
.switchIfEmpty(Mono.just(DatabaseSelection.undecided()));
}
其任务是在运行时选择数据库名称,以读取Reactor上下文中包含的一些数据,这些数据由webfilter过滤器功能填充:
public Mono<Void> filter(ServerWebExchange serverWebExchange,WebFilterChain webFilterChain) {
....
return webFilterChain.filter(serverWebExchange)
.subscriberContext(e -> e.put("realmId","some string"));
一切都按预期工作:我可以从db选择器Bean中的上下文中读取内容,但是我需要将选择信息传达回webfilter,后者应在最终响应中添加特定的标头。 我在想像这样的东西
serverWebExchange.getResponse().beforeCommit(() -> {
Mono.subscriberContext().doOnNext(ctx,{
// fetch the selected db value here and add the header
});
});
问题是,如何在上下文中添加一些新内容并通过上面的函数将其提取?
编辑:getRealmFromContext()函数订阅上下文并将其映射以获取领域值。
最好
FB
解决方法
好吧,在挖掘之后,我没有按照我期望的方式进行计算;我只是解决了这个问题
Mono.zip(Mono.just(serverWebExchange.getResponse()),selectionDbService.translateRealmToDbName(realmId))
.subscribe(objects -> objects.getT1().beforeCommit(() -> {
serverWebExchange.getResponse().getHeaders().add(COMPANY_HEADER_NAME_RESPONSE,objects.getT2());
return Mono.empty();
}) );
为了避免两次调用该服务,我使用了一个缓存系统。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。