Rabbitmq 项目反应堆:恢复通量排放

Rabbitmq 项目反应堆:恢复通量排放,rabbitmq,reactor,Rabbitmq,Reactor,我有一个@Bean public Consumer inbound(){..}函数Bean,它充当rabbit mq队列的入站绑定器。 到目前为止,函数正在毫无问题地使用来自兔子的事件。 代码如下所示: @Bean public Consumer<Flux<String>> inbound() { var counter = new AtomicInteger(0); incrementSequentially(counter);

我有一个@Bean public Consumer inbound(){..}函数Bean,它充当rabbit mq队列的入站绑定器。 到目前为止,函数正在毫无问题地使用来自兔子的事件。 代码如下所示:

@Bean public Consumer<Flux<String>> inbound() {

        var counter = new AtomicInteger(0);
        incrementSequentially(counter);

        return s -> s.repeat(()-> counter.intValue() % 3 == 0)
                .buffer(3)
                .subscribeOn(Schedulers.immediate())
                .subscribe(
                        strings -> {
                            log.info("Received={}", strings);
                            try {
                                SECONDS.sleep(5);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            log.info("Executed={}", strings.stream().map(String::toUpperCase).collect(Collectors.toList()));
                        },
                        throwable -> log.error("OnError"),
                        () -> log.info("OnComplete")
                );
    }

@Bean公共消费者入站(){
var计数器=新的原子整数(0);
按顺序递增(计数器);
返回s->s.repeat(()->counter.intValue()%3==0)
.缓冲区(3)
.subscribeOn(Schedulers.immediate())
.订阅(
字符串->{
info(“Received={}”,字符串);
试一试{
睡眠(5);
}捕捉(中断异常e){
e、 printStackTrace();
}
log.info(“Executed={}”,strings.stream().map(String::toUpperCase.collect(Collectors.toList());
},
throwable->log.error(“OnError”),
()->log.info(“OnComplete”)
);
}
我试图做的是,根据一些外部条件,以某种方式停止/恢复兔子队列中的消费(我试图通过原子计数器重复执行此操作,原子计数器在单独的线程上递增,没有任何用处)

理想的解决方案是让流量对使用者函数之外的bool更改作出反应(如果bool==true,则恢复订阅服务器上的onNext),而不管是否连续填充兔子队列

我还尝试使用repeatUntil(..),并与repeat()运算符配对,但我得到的结果是,当达到'until'条件时,订户在流量上调用onComplete->因此流量不会继续,那么直到条件不再有效