我正在使用Spring webflux和反应性mongo驱动程序获取com.mongodb.MongoWaitQueueFullException

时间:2019-05-17 12:31:52

标签: spring mongodb rabbitmq reactive-programming reactive

我的Spring Webflux + mongo + RabbitMQ应用程序得到了 com.mongodb.MongoWaitQueueFullException 。我正在使用Mongo反应性驱动程序,现在将WaitQueueSize设置为1000(默认值为500)

在我的代码中,我使用ReactiveMongoRepository findObjectByColumnName方法从mongo中获取记录。 Mono发出数据后,我将该对象发送给RabbitMQ。 我正在执行性能测试以了解系统的可伸缩性,在并发请求15万次后,我得到了异常。

代码

public Mono<User> getUser(String Id) {
        return repository.findUserById(Id).flatMap(user ->                 
                         publisher.sendToQueue(user));
}

和发布者代码

public Mono<User> sendToQueue(User user) {
    Mono<ResponseEntity<Object>> responseMono = Mono.fromCallable(() -> {
                rabbitTemplate.convertAndSend(exchangeName, routingKey, buildUserPOJO(user));
                return ResponseEntity.accepted().build();
            }
    );

    return responseMono.then(Mono.just(user));

}

我的观察者是什么,如果删除代码以将对象发送到RabbitMq并仅从Mongo检索数据并返回Mono,则不会得到 com.mongodb.MongoWaitQueueFullException

更改代码

public Mono<User> getUser(String Id) {
return repository.findUserById(Id);
}

在500K并发用户负载测试之前,我的代码可以正常工作。我没有收到 com.mongodb.MongoWaitQueueFullException 。我的代码有什么问题?由于RabbitMQ流与mongo访问没有任何关系。

0 个答案:

没有答案