WebFlux(反应堆)中的文件处理

问题描述 投票:0回答:1

我正在一个未完成的项目中,正在进行文件处理IO的lot。如果我以命令式阻塞的方式编写IO代码,然后将它们包装在Mono中,然后将它们发布在boundedElastic调度程序上,是否足够? boundedElastic池大小会限制并发操作的数量吗?

如果这不是正确的方法,可以举个例子说明如何使用Reactor将字节写入文件吗?

reactive-programming spring-webflux project-reactor reactor spring-reactor
1个回答
0
投票

如果我以命令式阻塞的方式编写IO代码然后将它们包装在Mono中,然后将它们发布在boundedElastic调度程序上,就足够了吗?

这在某种程度上取决于意见-但不,对于被动式绿地项目恕我直言,当然不理想。 boundedElastic()调度程序非常适合在您[[必须时与阻塞IO接口,但是当存在真正的非阻塞解决方案时,它们并不是很好的替代方案。

[在您的情况下,我希望将AsynchronousFileChannel包装在反应式发布商中。为此,您需要使用create()push(),然后对sink进行显式调用,但是具体地

how

取决于您的用例。作为文件写入的“最简单的情况”,您可以执行以下操作:static Mono<Void> writeToFile(AsynchronousFileChannel channel, String content) { return Mono.create(sink -> { byte[] bytes = content.getBytes(); ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.put(bytes); buffer.flip(); channel.write(buffer, 0, null, new CompletionHandler<>() { @Override public void completed(Integer result, Object attachment) { sink.success(); } @Override public void failed(Throwable exc, Object attachment) { sink.error(exc); } }); }); }
可以找到here,这是将两个API桥接在一起的更详尽/全面的示例-几乎肯定还有其他API。
© www.soinside.com 2019 - 2024. All rights reserved.