小编XYZ*_*XYZ的帖子

Mono vs CompletableFuture

CompletableFuture在单独的线程上执行任务(使用线程池)并提供回调函数.假设我有一个API调用CompletableFuture.那是一个API调用阻塞吗?线程是否会被阻塞,直到它没有得到API的响应?(我知道主线程/ tomcat线程将是非阻塞的,但是CompletableFuture任务正在执行的线程呢?)

据我所知,单声道完全没有阻挡.

如果我错了,请详细说明并纠正我.

java reactive-programming project-reactor completable-future

10
推荐指数
2
解决办法
1735
查看次数

多个主机的多个 WebClients ( Spring webflux )

在我的应用程序中,我调用 4 个不同的 api(全部位于不同的主机上)。我希望为每个主机和其他参数(例如保持活动状态等)都有一个单独的连接池。我可以使用单个 WebClient 实现此目的还是需要 4 个不同的 WebClient 实例来实现此目的?

另外,为每个主机拥有单独的连接池是否有意义?如果没有,我可以使用单个 WebClient 来实现此目的吗?

reactive-programming spring-webflux

6
推荐指数
1
解决办法
4569
查看次数

Spring webflux 中的 flatMap() 与 subscribe()

我是 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 是否阻塞?提前致谢 !

reactive-programming spring-webflux

5
推荐指数
1
解决办法
9794
查看次数

Mono.subscriberContext() 返回旧上下文

我有一个带有方法 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?

java reactive-programming project-reactor spring-webflux

0
推荐指数
1
解决办法
4380
查看次数