Saltar al contenido

configure spring.codec.max-in-memory-size al usar ReactiveElasticsearchClient

Mantén la atención porque en esta crónica vas a hallar la solución que buscas.

Solución:

Usando la reacción simple WebClient Me encontré con el mismo problema (pasando de 2.1.9 a 2.2.1.) No tuve suerte al configurar spring.codec.max-in-memory-size y luego encontré una pista de que este no era el camino a seguir de todos modos:

… En el lado del cliente, el límite se puede cambiar en WebClient.Builder.

(fuente, incluido el enlace muerto :-S)

todavia no he averiguado donde WebClient.Builder obtiene el límite predeterminado de 256 K1. Sin embargo, lo siguiente me permitió aumentar el límite de tamaño del búfer a 16M:

WebClient.builder()
  .…
  .exchangeStrategies(ExchangeStrategies.builder()
    .codecs(configurer -> configurer
      .defaultCodecs()
      .maxInMemorySize(16 * 1024 * 1024))
    .build())
  .build();

Entonces, me parece (sin conocer las complejidades de spring-data-elasticsearch) que si de alguna manera puedes poner tus manos en el WebClient como regresado de la WebClientProvider deberías poder mutarlo para incluir el ExchangeStrategies desde arriba.

Tal vez pueda proporcionar su propia anulación de DefaultWebClientProvider a lo largo de las líneas de (¡absolutamente no probado!):

class MyDefaultWebClientProvider extends DefaultWebClientProvider 
  @Override
  public WebClient get(InetSocketAddress endpoint) 
    return super.get(endpoint)
      .mutate() // Obtain WebClient.Builder instance.
      .exchangeStrategies(ExchangeStrategies.builder()
        .codecs(configurer -> configurer
          .defaultCodecs()
          .maxInMemorySize(16 * 1024 * 1024))
        .build())
      .build();
  

YMMV.


ACTUALIZACIÓN #1:

1) Ahora lo encontré. Y explica por qué establecer spring.codec.max-in-memory-size no tiene efecto; la propiedad está codificada en 256K en la clase base que usan todos los códecs predeterminados, cf. BaseDefaultCodecs.

Hace un par de días implementé la posibilidad de personalizar el WebClient, verifique el problema de Jira correspondiente. Estará disponible en Spring Data Elasticsearch 3.2.4 y ya se encuentra en la rama maestra actual.

El código de configuración se ve así:

@Configuration
public class ReactiveRestClientConfig extends AbstractReactiveElasticsearchConfiguration 
    @Override
    public ReactiveElasticsearchClient reactiveElasticsearchClient() 
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder() //
                .connectedTo("localhost:9200") //
                .withWebClientConfigurer(webClient -> 
                    ExchangeStrategies exchangeStrategies = ExchangeStrategies.builder()
                            .codecs(configurer -> configurer.defaultCodecs()
                                    .maxInMemorySize(-1))
                            .build();
                    return webClient.mutate().exchangeStrategies(exchangeStrategies).build();
                )
                .build();
        return ReactiveRestClients.create(clientConfiguration);

    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *