我知道 java DynamoDB 的 SDK 被认为是异步非阻塞的,但我的问题是:
问:发电机更新是否仍然需要在另一个线程上使用 operator publishOn才能在反应性上下文中更安全?
Mono.fromFuture(table.update()).publishOn();
我知道 java DynamoDB 的 SDK 被认为是异步非阻塞的,但我的问题是:
问:发电机更新是否仍然需要在另一个线程上使用 operator publishOn才能在反应性上下文中更安全?
Mono.fromFuture(table.update()).publishOn();
假设您使用的是 AWS Java SDK v2,则无需担心委派给线程池。AWS SDK 已经确保您不会阻塞重要的线程。有关详细信息,请参阅文档:
AWS SDK for Java 2.x 使用 Netty(一种异步事件驱动的网络应用程序框架)来处理 I/O 线程。AWS SDK for Java 2.x 在 Netty 后面创建一个 ExecutorService,以完成从 HTTP 客户端请求返回到 Netty 客户端的期货。如果开发人员选择停止或休眠线程,这种抽象可以降低应用程序中断异步进程的风险。默认情况下,为每个异步客户端生成 50 个线程,并在 ExecutorService 内的队列中进行管理。
实际上,它甚至使用了比真正反应式应用程序所需的更多线程。幸运的是,如果需要,SDK 还提供了选择退出该行为的选项。
另一件需要注意的事情CompletableFuture
是与响应式类型不同的是渴望Mono
。出于这个原因,最好使用该fromFuture
方法的 lambda 版本:
Mono.fromFuture(() -> table.update())