Я получаю исключение com.mongodb.MongoWaitQueueFullException с Spring webflux и реактивным драйвером Монго - PullRequest
0 голосов
/ 17 мая 2019

Я получаю 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 не имеет никакого отношения к монго-доступу.

...