Получение сигнала отмены из успешного запроса - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь создать несколько веб-фильтров в приложении Spring-Boot WebFlux и заметил, что все разработанные мной почтовые операции работали только с конечной точкой Actuator, но не с моими собственными конечными точками.

Во времяВ своем анализе я заметил, что когда я вызываю конечную точку привода (например, здоровье), Mono завершается, как и ожидалось.Однако, когда я вызвал свою конечную точку, моно испустил сигнал отмены.Это ожидаемое поведение?

Зависимости:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
    </parent>

    <groupId>test</groupId>
    <artifactId>tests</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

Мой код:

@SpringBootApplication
@RestController
public class Main {

    private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }

    @Bean
    public WebFilter newFilter() {
        return (exchange, chain) -> chain.filter(exchange)
                                         .doFinally(signalType -> {
                                             LOGGER.info("Status: {}", signalType);
                                         })
                                         .doAfterSuccessOrError(((aVoid, throwable) -> {
                                             LOGGER.info("Only actuators come to here.");
                                         }));
    }


    @GetMapping("/hello")
    public Mono<String> probe() {
        return Mono.fromCallable(() -> "world");
    }
}
curl http://localhost:8080/test

Консоль: Статус: отменить

curl http://localhost:8080/actuator/health

Консоль: сюда приходят только приводы.Статус: onComplete

Я ожидал, что все вызовы конечной точки будут выполнять функцию doAfterSuccessOrError, но только Здоровье привода выполняет.

...