项目反应器/RabbitMQ:分散/聚集

项目反应器/RabbitMQ:分散/聚集,rabbitmq,project-reactor,spring-rabbit,Rabbitmq,Project Reactor,Spring Rabbit,目前,我们有一个RabbitMQ实现,其中多个使用者在返回之前侦听一个缝合在一起的事件。 在T时间内对N个预期响应的呼吁有三个基本结果: 我们在T下得到N个响应 我们在T之后得到少于N个响应 我们在T之后得到0个响应(冗余,但仍然) 目前,我们有一个普通的Spring引导实现,它使用CountdownLatch(请求)和ConcurrentMap(侦听器),但这开始影响性能。 目前的想法是这样的: public Mono<ResponseDto> request(Mono<

目前,我们有一个RabbitMQ实现,其中多个使用者在返回之前侦听一个缝合在一起的事件。 在T时间内对N个预期响应的呼吁有三个基本结果:

  • 我们在T下得到N个响应
  • 我们在T之后得到少于N个响应
  • 我们在T之后得到0个响应(冗余,但仍然)
  • 目前,我们有一个普通的Spring引导实现,它使用CountdownLatch(请求)和ConcurrentMap(侦听器),但这开始影响性能。

    目前的想法是这样的:

    public Mono<ResponseDto> request(Mono<RequestDto> mono){
        return mono.flatMap( 
            request -> dispatch( request ).collectList()
            .map( responses -> new ResponseDto(...))
        );
    }
    private Flux<R> dispatch( RequestDto request ){
        ?
    }
    @RabbitListener(...)
    public void heyListen(Message<R> response){
        ?
    }
    
    公共单声道请求(单声道){
    返回mono.flatMap(
    请求->分派(请求).collectList()
    .map(响应->新响应到(…)
    );
    }
    专用流量调度(请求到请求){
    ?
    }
    @拉比特侦听器(…)
    公共无效heyListen(消息响应){
    ?
    }
    
    我不确定的是适当的限制

    • takeUntil
      带有自定义谓词的选项
    • 手柄
      带倒计时闩锁-否

    有什么建议吗?