从成功的请求中接收取消信号

时间:2019-05-30 14:20:26

标签: spring spring-boot spring-webflux

我试图在Spring-Boot WebFlux应用程序中创建一些WebFilter,我注意到我开发的所有后期操作仅适用于Actuator的端点,而不适用于我自己的端点。

在分析过程中,我注意到当我调用执行器端点(例如:运行状况)时,单声道已按预期完成。但是,当我调用端点时,单声道发出了取消信号。 这是预期的行为吗?

依赖项:

<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函数,但只有执行器的Health可以执行。

1 个答案:

答案 0 :(得分:0)

这似乎是SpringBoot 2.1.5的错误,升级到2.1.7将解决此问题