Comments (1)
Fixed with code below.
package xpto;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.netty.channel.ChannelOption;
import io.netty.handler.timeout.ReadTimeoutHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction;
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancedExchangeFilterFunction;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.http.codec.json.Jackson2JsonEncoder;
import org.springframework.web.reactive.function.client.ExchangeStrategies;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.DefaultUriBuilderFactory;
import reactor.netty.http.client.HttpClient;
import java.util.concurrent.TimeUnit;
@Configuration
@EnableDiscoveryClient
@Slf4j
public class WebclientConfiguration {
private final ObjectMapper objectMapper;
@Value("${web.client.read-timeout:25000}")
private final int webClientReadTimeout;
@Value("${web.client.connection-timeout:3000}")
private final int webClientConnectionTimeout;
public WebclientConfiguration(ObjectMapper objectMapper,
@Value("${web.client.read-timeout:25000}") int webClientReadTimeout,
@Value("${web.client.connection-timeout:3000}") int webClientConnectionTimeout) {
this.objectMapper = objectMapper;
this.webClientReadTimeout = webClientReadTimeout;
this.webClientConnectionTimeout = webClientConnectionTimeout;
}
private ClientHttpConnector getClientHttpConnector() {
return new ReactorClientHttpConnector(
HttpClient.create().compress(true).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, webClientConnectionTimeout)
.doOnConnected(conn -> conn.addHandlerLast(new ReadTimeoutHandler(webClientReadTimeout, TimeUnit.MILLISECONDS))));
}
@Bean
public DefaultUriBuilderFactory builderFactory() {
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory();
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
return factory;
}
@Bean(name = "webClientConsul")
public WebClient webClientConsul(
WebClient.Builder webClientBuilder,
DeferringLoadBalancerExchangeFilterFunction<LoadBalancedExchangeFilterFunction> exchangeFilterFunction
) {
webClientBuilder.filter(exchangeFilterFunction);
return buildWebClient(webClientBuilder);
}
@Bean(name = "webClientDefault")
public WebClient webClientDefault(WebClient.Builder webClientBuilder) {
return buildWebClient(webClientBuilder);
}
private WebClient buildWebClient(WebClient.Builder webClientBuilder) {
ClientHttpConnector connector = getClientHttpConnector();
return webClientBuilder
.clientConnector(connector)
.exchangeStrategies(getExchangeStrategies())
.build();
}
private ExchangeStrategies getExchangeStrategies() {
return ExchangeStrategies.builder()
.codecs(clientDefaultCodecsConfigurer -> {
clientDefaultCodecsConfigurer
.defaultCodecs()
.jackson2JsonEncoder(
new Jackson2JsonEncoder(objectMapper, MediaType.APPLICATION_JSON, MediaType.TEXT_EVENT_STREAM, MediaType.APPLICATION_STREAM_JSON));
clientDefaultCodecsConfigurer
.defaultCodecs()
.jackson2JsonDecoder(
new Jackson2JsonDecoder(objectMapper, MediaType.APPLICATION_JSON, MediaType.TEXT_EVENT_STREAM, MediaType.APPLICATION_STREAM_JSON));
}).build();
}
}
from spring-cloud-consul.
Related Issues (20)
- Consul token query parameter deprecated in Consul 1.17 HOT 3
- Spring Cloud Consul does not work well with application context hierarchies and profiles
- Documentation - Clarify disabling of service registration
- Consul Admin Partition Support
- I hope to be able to load both key simultaneously
- The classloader/component “org.springframework.boot.loader.LaunchedURLClassLoader @ 0x800d8c18” occupies 621,015,112 (74.98%) bytes. The memory is accumulated in one instance of “java.lang.Object[]”, loaded by “<system class loader>”, which occupies 601,708,440 (72.65%) bytes. HOT 1
- Runtime reflection is not supported for public void org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties.setHealthCheckPath
- Does the CVE-2022-22965 Vulnerability Affect spring-cloud-circuitbreaker? HOT 1
- How to use Consul as Config center for Spring Cloud Gateway
- Failed to bind properties under 'spring.cloud.consul.config' HOT 2
- Springboot application restarting after getting warning -Error querying consul Key/Values for context HOT 1
- ConsulConfigProperties not caling init() method in spring-cloud-consul-config:3.1.2
- Depends on web to import a config
- Spring Boot 3.1 Compatibility? HOT 1
- Catalog Watch uses blocking queries incorrectly HOT 1
- Spring Cloud Consul not decrypting the tls key-store-password & certificate-password
- dependency cycle when Use my own ConsulServiceRegistry with spring-boot-starter-actuator HOT 3
- spring.config.import in DynamicPropertySource is not contributed using ConfigDataApplicationContextInitializer in tests
- Accessed Consul cluster's KV store with TLS and ACL enabled through code, but Spring Boot configuration failure
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from spring-cloud-consul.