Flux.concatMap переходит к следующему событию перед возвратом результата

#spring-webflux #project-reactor #concatmap

#spring-webflux #проект-реактор #concatmap

Вопрос:

У меня есть поток объектов тестового примера, для каждого объекта мне нужно вызвать внешнюю службу, как только получен ответ службы, в следующей операции он проверяет, является ли ответ действительным или нет. Но случайным образом для нескольких объектов, прежде чем будет получен ответ от внешней службы, Flux отправляет сигнал.

 Flux.fromIterable(masterTestCasesList).concatMap(tc -> iSandBoxRuleEngineClient.getRoutePlanResponseForTestCase(tc))
        .map(respObj -> {//checks if the response is matched.
            return resu<}).collectList();
                                    
                                    
  

Ожидаемый результат :
1) Идентификатор ссылки: 10002 TestCase: TESTCASE_1.
2) Перед вызовом службы для идентификатора ссылки: 10002 TestCase: TESTCASE_1.
3) После попадания: соответственно сгенерировано; Идентификатор ссылки: 10002 TestCase: TESTCASE_1.
4) Идентификатор ссылки: 10002 TestCase: TESTCASE_1 соответствует true .

1) Идентификатор ссылки: 10002 TestCase: TESTCASE_2. 2) Перед вызовом службы для идентификатора ссылки: 10002 TestCase: TESTCASE_2. 3) После попадания: соответственно сгенерировано; Идентификатор ссылки: 10002 TestCase: TESTCASE_2. 4) Идентификатор ссылки: 10002 TestCase: TESTCASE_2 соответствует true .

1) Идентификатор ссылки: 10002 TestCase: TESTCASE_3. 2) Перед вызовом службы для идентификатора ссылки: 10002 TestCase: TESTCASE_3. 3) После попадания: соответственно сгенерировано; Идентификатор ссылки: 10002 TestCase: TESTCASE_3. 4) Идентификатор ссылки: 10002 TestCase: TESTCASE_3 соответствует true .

Сгенерированный вывод:

1) Идентификатор ссылки: 10002 TestCase: TESTCASE_1. 2) Перед вызовом службы для идентификатора ссылки: 10002 TestCase: TESTCASE_1. 3) После попадания: соответственно сгенерировано; Идентификатор ссылки: 10002 TestCase: TESTCASE_1. 4) Идентификатор ссылки: 10002 TestCase: TESTCASE_1 соответствует true .

1) Идентификатор ссылки: 10002 TestCase: TESTCASE_2. 2) Перед вызовом службы для идентификатора ссылки: 10002 TestCase: TESTCASE_2.

1) Идентификатор ссылки: 10002 TestCase: TESTCASE_3. 2) Перед вызовом службы для идентификатора ссылки: 10002 TestCase: TESTCASE_3. 3) После попадания: соответственно сгенерировано; Идентификатор ссылки: 10002 TestCase: TESTCASE_3. 4) Идентификатор ссылки: 10002 TestCase: TESTCASE_3 соответствует true .

Комментарии:

1. Перед тем, как будут получены все внешние ответы, выдается сигнал onComplete, который заставляет collectList() создавать mono списка. если имеется 6 тестовых примеров, тогда collectList показывает 4 (случайное число) вместо 6.