Spring Cloud Gateway的Filter中如果有耗时操作应该如何处理?
1,如果不处理,会大大影响吞吐量;
2,spring cloud gateway是reactive的编码风格,改造代码难度很大,很不习惯;
3,spring cloud gateway使用事件线程处理一个http请求
4,事件线程比较少(参考netty event loop),不能有耗时操作,否则影响吞吐量;
5,spring cloud gateway可以使用一个异步线程池:boundedElastic
,通过Schedulers.boundedElastic()
获取
6,spring cloud gateway还可以使用一个线程池:parallel,通过Schedulers.parallel()
获取,通常用于CPU密集的任务。
7,把耗时操作,提交到boundedElastic线程池处理:
yourReactiveStream
.publishOn(Schedulers.boundedElastic())
.doOnNext(item -> {
// ... Blocking code or computation-intensive task
})
.subscribe();