Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 弹簧反应器平行通量被卡住_Spring Boot_Kotlin_Stream_Project Reactor - Fatal编程技术网

Spring boot 弹簧反应器平行通量被卡住

Spring boot 弹簧反应器平行通量被卡住,spring-boot,kotlin,stream,project-reactor,Spring Boot,Kotlin,Stream,Project Reactor,我用反应堆来产生无限的通量 一旦我使它并行,流在第一个传递的值之后就会卡住,我不知道为什么 val source = source().parallel().runOn(Schedulers.parallel()) .map(this::toUpperCase) .subscribe(sink()) private fun sink() = SimpleSink<SimpleDaoModel>() priva

我用反应堆来产生无限的通量

一旦我使它并行,流在第一个传递的值之后就会卡住,我不知道为什么

    val source = source().parallel().runOn(Schedulers.parallel())
            .map(this::toUpperCase)
            .subscribe(sink())

    private fun sink() = SimpleSink<SimpleDaoModel>()

    private fun toUpperCase(simpleDaoModel: SimpleDaoModel) = simpleDaoModel.copy(stringValue = simpleDaoModel.stringValue.toUpperCase())

    private fun source() = Flux.create { sink: FluxSink<SimpleDaoModel> ->

        fun getNextAsync(): Job = GlobalScope.launch(Dispatchers.Default) {
            val task = customSimpleModelRepository.getNextTask()
            if (task != null) {
                logger.info("emitting next task")
                sink.next(task)
            } else {
                logger.info("No more tasks")
                Timer("nextTaskBackoff", false).schedule(1000) {
                    getNextAsync()
                }
            }
        }
        sink.onRequest { getNextAsync() }
    }

    class SimpleSink<T> : BaseSubscriber<T>() {
        public override fun hookOnSubscribe(subscription: Subscription) {
            println("Subscribed")
            request(1)
        }

        public override fun hookOnNext(value: T) {
            println(value)
            request(1)
        }
    }
val source=source().parallel().runOn(Schedulers.parallel())
.map(此::toUpperCase)
.subscribe(sink())
私人娱乐接收器()=SimpleSink()
private-fun-toUpperCase(simpleDaoModel:simpleDaoModel)=simpleDaoModel.copy(stringValue=simpleDaoModel.stringValue.toUpperCase())
private fun source()=Flux.create{sink:FluxSink->
fun getNextAsync():Job=GlobalScope.launch(Dispatchers.Default){
val task=customSimpleModelRepository.getNextTask()
如果(任务!=null){
logger.info(“发出下一个任务”)
下一步(任务)
}否则{
logger.info(“不再有任务”)
计时器(“nextTaskBackoff”,false)。计划(1000){
getNextAsync()
}
}
}
sink.onRequest{getNextAsync()}
}
类SimpleSink:BaseSubscriber(){
public override fun HookonSubscripte(订阅:订阅){
println(“认购”)
请求(1)
}
public override fun hookOnNext(值:T){
println(值)
请求(1)
}
}
如果我移除并行操作符,一切都会像一个符咒一样工作

注意:getNextTask是一个挂起的函数