如何使用自定义错误通道和 WebFlux.inboundGateway 来回复错误响应?

How to use custom error channel and WebFlux.inboundGateway to reply with an error response?

按照下面的两个链接,我创建了一个 IntegrationFlow,它在出现错误时调用自定义 errorFlow。然而,我看到的行为是应用程序从不回复客户端,它只是挂起。如何回复来自 errorFlow 的请求?作为参考,我托管了我的样本 on github.

    @Bean
    public IntegrationFlow mainFlow() {
        return IntegrationFlows.from(WebFlux.inboundGateway(URI)
                .errorChannel(customErrorChannel()))
                .channel(MessageChannels.flux()) //Work around: https://github.com/spring-projects/spring-integration/issues/3276
                .transform(p -> {
                    throw new RuntimeException("Error!");
                    //return "Ok Response"; //If we comment the throw and uncomment this, then the the code replies to the request ok.
                })
                .get();
    }

    @Bean
    public PublishSubscribeChannel customErrorChannel() {
        return MessageChannels.publishSubscribe().get();
    }

    @Bean
    public IntegrationFlow errorFlow() {
        return IntegrationFlows.from("customErrorChannel")
                .transform(p -> {
                    return "Error Response";
                })
                .get();
    }

请求...

GET http://localhost:8080/foo

原来这个逻辑还是有问题。

我们需要进一步调查并找出解决方法。

与此同时,您可以使用 ExpressionEvaluatingRequestHandlerAdvice 对发生故障的变压器使用变通方法,并在 errorFlow() 中以类似的方式处理错误。将 returnFailureExpressionResult 视为 true。而您的 onFailureExpression 应该是对 customErrorChannel 的网关调用。或者您可以使用该表达式中的 MessagingTemplate.sendAndReceive() API 而不是网关。

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain