


Ausführliche Erläuterung des von RestTemplate integrierten Menübands der Springcloud-Komponenten
In diesem Artikel geht es darum, wie Springcloud Ribbons unterschiedlich integriert (feign, zuul, RestTemplate). Dieser Artikel befasst sich zunächst mit RestTemplate.
Das Klassendiagramm von RestTemplate lautet wie folgt
HttpAccessor
Hauptsächlich erstellt basierend aufClientHttpRequestFactory
ClientHttpRequest
InterceptingHttpAccessor
erweitertHttpAccessor
, um ein abgefangenesInterceptingClientHttpRequest
zu erstellen. Dies ist der Kern des integrierten Ribbons, wennClientHttpRequestInterceptor
ein HTTP initiiert Anforderungsaufruf, es wird zuerst den Interceptor durchlaufen und dann tatsächlich die http-Anfrage initiieren.RestTemplate
aufgebaut? In der Klasse ClientHttpRequestInterceptor
gibt es den folgenden Code: LoadBalancerAutoConfiguration
@LoadBalanced @Autowired(required = false) private List<RestTemplate> restTemplates = Collections.emptyList();Solange die Anmerkung
hinzugefügt wird, wird @LoadBalanced
wie folgt eingefügt Konfiguration wird geladen: RestTemplate
@Configuration @ConditionalOnMissingClass("org.springframework.retry.support.RetryTemplate") static class LoadBalancerInterceptorConfig { @Bean public LoadBalancerInterceptor ribbonInterceptor( LoadBalancerClient loadBalancerClient, LoadBalancerRequestFactory requestFactory) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } @Bean @ConditionalOnMissingBean public RestTemplateCustomizer restTemplateCustomizer( final LoadBalancerInterceptor loadBalancerInterceptor) { return new RestTemplateCustomizer() { @Override public void customize(RestTemplate restTemplate) { List<ClientHttpRequestInterceptor> list = new ArrayList<>( restTemplate.getInterceptors()); list.add(loadBalancerInterceptor); restTemplate.setInterceptors(list); } }; } }Auf diese Weise wurde
mit LoadBalancerInterceptor eingerichtet RestTemplate
erstellt. Das Klassendiagramm von SimpleClientHttpRequestFactory
lautet wie folgt: ClientHttpRequestFactory
aufrufen, um InterceptingClientHttpRequestFactory
zu erhalten und durch Kombination InterceptingClientHttpRequest
zu initiieren Zu diesem Zeitpunkt beauftragt es seine interne Klasse ClientHttpRequestFactory
mit der Verarbeitung: InterceptingClientHttpRequest
rreeeInterceptingRequestExecution
führt zunächst die erste Ausführung der Interceptor-Sammlung durch Rufen Sie den else-Code zurück und führen Sie ihn aus. Um tatsächlich eine http-Anfrage zu initiieren, gibt es zwei Möglichkeiten, die
ClientHttpRequestFactory
- Eine ist
- mit der Methode bereitgestellt von J2SE (die vom java.net-Paket bereitgestellte Methode) Erstellen Sie die zugrunde liegende HTTP-Anforderungsverbindung
SimpleClientHttpRequestFactory
Eine Möglichkeit besteht darin, die - -Methode zu verwenden. Die unterste Ebene verwendet HttpClient für den Zugriff Mit dem Remote-HTTP-Dienst können Sie Informationen wie Verbindungspool und Zertifikat konfigurieren.
HttpComponentsClientHttpRequestFactory
RestTemplate verwendet standardmäßig SimpleClientHttpRequestFactory und ruft intern JDKs HttpConnection auf. Das Standard-Timeout ist -1:
@Override public ClientHttpResponse execute(HttpRequest request, byte[] body) throws IOException { if (this.iterator.hasNext()) { ClientHttpRequestInterceptor nextInterceptor = this.iterator.next(); return nextInterceptor.intercept(request, body, this); }else { ClientHttpRequest delegate = requestFactory.createRequest(request.getURI(), request.getMethod()); for (Map.Entry<String, List<String>> entry : request.getHeaders().entrySet()) { List<String> values = entry.getValue(); for (String value : values) { delegate.getHeaders().add(entry.getKey(), value); } } if (body.length > 0) { StreamUtils.copy(body, delegate.getBody()); } return delegate.execute(); } }
Verwenden Sie das
Methode. Verwenden Sie einen Verbindungspool (empfohlen) und Sie können auch eine Wiederholungsstrategie festlegen (nicht speziell untersucht).HttpComponentsClientHttpRequestFactory
Wenn Sie den Wiederholungsmechanismus aktivieren möchten, können wir die Wiederholungskomponente von Spring einführen
@Bean @LoadBalanced public RestTemplate restTemplate() { SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(1000 * 2);//连接超时时间 factory.setReadTimeout(1000 * 1);//读超时时间 return new RestTemplate(factory); }
wie dieses springcloud-ribbon Die folgende Konfiguration wird verschärft:
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>版本号</version> </dependency>
@Configuration @ConditionalOnClass(RetryTemplate.class) public static class RetryAutoConfiguration { @Bean public RetryTemplate retryTemplate() { RetryTemplate template = new RetryTemplate(); template.setThrowLastExceptionOnExhausted(true); return template; } @Bean @ConditionalOnMissingBean public LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory() { return new LoadBalancedRetryPolicyFactory.NeverRetryFactory(); } } @Configuration @ConditionalOnClass(RetryTemplate.class) public static class RetryInterceptorAutoConfiguration { @Bean @ConditionalOnMissingBean public RetryLoadBalancerInterceptor ribbonInterceptor( LoadBalancerClient loadBalancerClient, LoadBalancerRetryProperties properties, LoadBalancedRetryPolicyFactory lbRetryPolicyFactory, LoadBalancerRequestFactory requestFactory) { return new RetryLoadBalancerInterceptor(loadBalancerClient, properties, lbRetryPolicyFactory, requestFactory); } @Bean @ConditionalOnMissingBean public RestTemplateCustomizer restTemplateCustomizer( final RetryLoadBalancerInterceptor loadBalancerInterceptor) { return new RestTemplateCustomizer() { @Override public void customize(RestTemplate restTemplate) { List<ClientHttpRequestInterceptor> list = new ArrayList<>( restTemplate.getInterceptors()); list.add(loadBalancerInterceptor); restTemplate.setInterceptors(list); } }; } }
Der Interceptor wird durch
ersetzt, wo die Wiederholungskomponente retryTemplate integriert ist. Die Wiederholungsstrategie wird von der-Schnittstelle konfiguriert. Die folgenden Standardkonfigurationsparameter sind RetryLoadBalancerInterceptor
@Bean @ConditionalOnClass(name = "org.springframework.retry.support.RetryTemplate") @ConditionalOnMissingBean public LoadBalancedRetryPolicyFactory loadBalancedRetryPolicyFactory(SpringClientFactory clientFactory) { return new RibbonLoadBalancedRetryPolicyFactory(clientFactory); }
RetryHandler
wird nur für ein bestimmtes Menüband wirksam. MaxAutoRetries und MaxAutoRetriesNextServer werden zusammen verwendet. Die maximale Anzahl von Wiederholungsversuchen beträgt für jeden Server. Wenn MaxAutoRetries=1 und MaxAutoRetriesNextServer=1 festgelegt sind, beträgt die maximale Anzahl von Wiederholungsversuchen. DefaultLoadBalancerRetryHandler
Verwandte Artikel: xxx.ribbon.MaxAutoRetries=1
Java-Beispiel – Array zur Sammlung
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des von RestTemplate integrierten Menübands der Springcloud-Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Dreamweaver CS6
Visuelle Webentwicklungstools

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung