CompletableFuture
在单独的线程上执行任务(使用线程池)并提供回调函数.假设我有一个API调用CompletableFuture
.那是一个API调用阻塞吗?线程是否会被阻塞,直到它没有得到API的响应?(我知道主线程/ tomcat线程将是非阻塞的,但是CompletableFuture任务正在执行的线程呢?)
据我所知,单声道完全没有阻挡.
如果我错了,请详细说明并纠正我.
java reactive-programming project-reactor completable-future
在我的应用程序中,我调用 4 个不同的 api(全部位于不同的主机上)。我希望为每个主机和其他参数(例如保持活动状态等)都有一个单独的连接池。我可以使用单个 WebClient 实现此目的还是需要 4 个不同的 WebClient 实例来实现此目的?
另外,为每个主机拥有单独的连接池是否有意义?如果没有,我可以使用单个 WebClient 来实现此目的吗?
我是 Spring WebFlux 的新手,正在尝试将我的 Spring MVC 应用程序转换为 webflux。我从我的服务中返回一个 Mono 单声道:
List<Store> stores = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
当我做:
mono.subscribe(stores::addAll);
dataexchange.put("stores", stores);
return Mono.just(dataexchange);
Run Code Online (Sandbox Code Playgroud)
然后作为响应将商店填充为空列表。但是,我可以在返回响应后验证 subscribe() 是否正常工作。
当我做 :
return mono.flatmap( (response) -> {
dataexchange.put("stores", response));
return Mono.just(dataexchange);
});
Run Code Online (Sandbox Code Playgroud)
然后在响应中填充商店。
有人可以解释一下这两者有什么区别吗?flatMap 是否阻塞?提前致谢 !
我有一个带有方法 context() 的类 PublishContext 如下:
public static Mono<Object> context(){
return Mono.empty().subscriberContext( context -> {
Context context1 = context.put("key", "hello");
System.out.println((String) context1.get("key"));
return context1;
});
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,上下文对象是 Context0@744 和 context1 是 Context@747 这是可以理解的,因为上下文是不可变的并且总是返回一个新的上下文。
在我的主课中,我有以下代码:
public static void main(String[] args) {
Mono<Object> objectMono = PublishContext.context();
objectMono.subscribe();
Mono<Object> objectMono1 = Mono.subscriberContext().flatMap(context -> {
System.out.println((String) context.get("key"));
return Mono.empty();
});
objectMono1.subscribe();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我得到的上下文为 Context0@744,即旧上下文,因此得到“上下文为空”异常。有人可以解释这种行为吗?另外,如何访问我从 context() 方法返回的 context0@747?