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是一个挂起的函数