我的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访问没有任何关系。