【发布时间】:2018-09-15 00:30:50
【问题描述】:
每当我需要将数据传递到反应链中时,我最终都会做这样的事情:
public Mono<String> doFooAndPassDtoAsMono(Dto dto) {
return Mono.just(dto)
.flatMap(dtoMono -> {
Mono<String> result = // remote call returning a Mono
return Mono.zip(Mono.just(dtoMono), result);
})
.flatMap(tup2 -> {
return doSomething(tup2.getT1().getFoo(), tup2.getT2()); // do something that requires foo and result and returns a Mono
});
}
给定以下示例 Dto 类:
class Dto {
private String foo;
public String getFoo() {
return this.foo;
}
}
因为一直压缩数据以将其向下传递(尤其是向下几级)通常会很乏味,所以我想知道是否可以像这样直接引用dto:
public Mono<String> doFooAndReferenceParam(Dto dto) {
Mono<String> result = // remote call returning a Mono
return result.flatMap(result -> {
return doSomething(dto.getFoo(), result); // do something that requires foo and result and returns a Mono
});
}
我对第二种方法的担忧是,假设订阅者在线程池上订阅了这个 Mono,我需要保证 Dto 是线程安全的(上面的例子很简单,因为它只带有一个 String 但如果它是不是)?
另外,哪一个被认为是“最佳实践”?
【问题讨论】:
标签: project-reactor