spring-cloud/spring-cloud-gateway

WebClient Request/Response bug?

Open

#2839 aperta il 11 gen 2023

Vedi su GitHub
 (5 commenti) (0 reazioni) (0 assegnatari)Java (3204 fork)batch import
enhancementhelp wanted

Metriche repository

Star
 (4284 star)
Metriche merge PR
 (Merge medio 1g 21h) (18 PR mergiate in 30 g)

Descrizione

Describe the bug Enabling WebClientHttpRoutingFilter & WebClientWriteResponseFilter leaves gateway client hanging. I can confirm that downstream HTTP calls works fine (200 OK with String Response), gateway logs also confirm 200 OK, but client is left hanging. Disabling WebClientHttpRoutingFilter & WebClientWriteResponseFilter beans (i.e., using default Netty routing & response handling) works just fine. We'd like to use a custom WebClient hence looking to get WebClientWriteResponseFilter working.

Appreciate any pointers. thanks

Sample

@Configuration
public class GatewayFilterConfig {
    @Bean
    public WebClient webClient() {
        return WebClient.builder().build();
    }

    @Bean
    public CustomWebClientRoutingFilter customWebClientRoutingFilter
            (WebClient webClient, ObjectProvider<List<HttpHeadersFilter>> headersFilters) {
        return new CustomWebClientRoutingFilter(webClient, headersFilters);
    }

    @Bean
    public CustomWebClientResponseFilter customWebClientResponseFilter () {
        return new CustomWebClientResponseFilter();
    }
}
public class CustomWebClientRoutingFilter extends WebClientHttpRoutingFilter {
    public CustomWebClientRoutingFilter(WebClient webClient, ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider) {
        super(webClient, headersFiltersProvider);
    }

    @Override
    public int getOrder() {
        return Integer.MAX_VALUE - 1; //Run before the NettyRoutingFilter
    }
}
public class CustomWebClientResponseFilter extends WebClientWriteResponseFilter {
    @Override
    public int getOrder() {
        return Integer.MAX_VALUE;
    }
}

Guida contributor