Я получаю com.mongodb.MongoWaitQueueFullException с моим весенним приложением webflux + mongo + RabbitMQ. Я использую реактивный драйвер Mongo и сейчас устанавливаю для WaitQueueSize значение 1000 (по умолчанию 500)
В моем коде я выбираю запись из Монго, используя метод ReactiveMongoRepository findObjectByColumnName.
После того, как Mono выдает данные, я отправляю этот объект в RabbitMQ.
Я делаю тест производительности, чтобы понять масштабируемость системы, после 150K одновременных запросов я получаю исключение.
Код
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 не имеет никакого отношения к монго-доступу.