spring-cloud/spring-cloud-gateway

WebClient Request/Response bug?

Open

#2 839 ouverte le 11 janv. 2023

Voir sur GitHub
 (5 commentaires) (0 réactions) (0 assignés)Java (3 204 forks)batch import
enhancementhelp wanted

Métriques du dépôt

Stars
 (4 284 stars)
Métriques de merge PR
 (Merge moyen 1j 21h) (18 PRs mergées en 30 j)

Description

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;
    }
}

Guide contributeur