Lernen von Springboot + Springcloud --- Aufrufe zwischen Microservices

Verwenden Sie RestTemplate, um Aufrufe zwischen Microservices durchzuführen

1. Fügen Sie in der Startklasse des Dienstes, der andere Mikrodienste aufrufen muss, hinzu

//只要引入boot就可以使用
    @Bean
    @LoadBalanced//表示用负载均衡调用服务 
    public RestTemplate restTemplate(){
    
    
        return new RestTemplate();
    }

2. Im GeschäftslogikcodeDas ist mein Beispiel

Verwenden Sie OpenFeign anstelle von RestTemplate

1), Abhängigkeiten einführen

Wir führen die Feign-Abhängigkeit in der POM-Datei des Order-Service-Dienstes (Dienst, der andere Dienste aufruft) ein:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2), Anmerkungen hinzufügen

Fügen Sie der Startklasse von order-service Anmerkungen hinzu, um die Funktion von Feign zu aktivieren
offen vortäuschen

3), schreiben Sie den Feign-Client

Erstellen Sie im Bestellservice eine neue Schnittstelle mit folgendem Inhalt:


@FeignClient(value = "user-server")//user-server为想要调用的微服务名称
public interface UserServiceClient {
    
    

    @GetMapping("/user/{id}")//完整的路径
    User findById(@PathVariable("id") Long id);
}

erklären
Auf diese Weise kann Feign uns dabei helfen, HTTP-Anfragen zu senden, ohne RestTemplate zum Senden selbst zu verwenden.

4), testen

Ändern Sie die Methode queryOrderById in der Klasse OrderService in order-service und verwenden Sie den Feign-Client anstelle von RestTemplate:
prüfen

benutzerdefinierte Konfiguration

Typ Wirkung veranschaulichen
vortäuschen.Logger.Level Protokollebene ändern Enthält vier verschiedene Ebenen: NONE (Standard), BASIC, HEADERS, FULL
NONE, keine Protokollierung. Standardoption
BASIC, nur Anforderungsmethode und URL zusammen mit Antwortstatuscode und Ausführungszeit protokollieren.
HEADERS, Protokollierung grundlegender Informationen sowie Anforderungs- und Antwortheader.
FULL, Protokollierung der Header, des Textkörpers und der Metadaten von Anfragen und Antworten.
feign.codec.Decoder Parser für das Antwortergebnis Analysieren der Ergebnisse von HTTP-Remote-Aufrufen, z. B. Parsen von JSON-Strings in Java-Objekte
feign.codec.Encoder Kodierung der Anforderungsparameter Kodieren Sie die Anforderungsparameter, um das Senden von HTTP-Anfragen wie POST-Anfragen zu erleichtern, und kodieren Sie die Anforderungsparameter im Anforderungstext
vortäuschen.Vertrag Unterstützte Anmerkungsformate Der Standardwert ist die Annotation von SpringMVC
vortäuschen.Wiederversucher Fehlerwiederholungsmechanismus Der Wiederholungsmechanismus für Anforderungsfehler ist standardmäßig „Nein“, aber die Wiederholung des Menübands wird verwendet. Wenn beispielsweise auf einen Dienst nicht zugegriffen werden kann, wird versucht, auf den B-Dienst im Cluster zuzugreifen

Unter normalen Umständen reicht uns der Standardwert aus. Wenn Sie ihn anpassen möchten, müssen Sie nur ein benutzerdefiniertes @Bean erstellen, um das Standard-Bean zu überschreiben.

Im Folgenden werden Protokolle als Beispiel verwendet, um zu demonstrieren, wie die Konfiguration angepasst wird.

  • Es gibt zwei Möglichkeiten, Feign-Protokolle zu ändern: die Konfigurationsdateimethode und die Java-Codemethode

Konfigurationsdateimethode

Das Ändern der Protokollebene von Feign basierend auf der Konfigurationsdatei kann auf einen einzelnen Dienst abzielen:

feign:  
  client:
    config: 
      user-service: # 针对某个微服务的配置
        loggerLevel: FULL #  日志级别 

Es ist auch möglich, alle Dienste gezielt anzusprechen:

feign:  
  client:
    config: 
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #  日志级别 

Die Protokollebene ist in vier Typen unterteilt:

  • NONE: Es werden keine Protokollinformationen aufgezeichnet. Dies ist der Standardwert.
  • BASIC: Protokollieren Sie nur die Anforderungsmethode, die URL, den Antwortstatuscode und die Ausführungszeit
  • HEADERS: Auf Basis von BASIC werden zusätzlich die Header-Informationen der Anfrage und Antwort erfasst
  • VOLLSTÄNDIG: Zeichnen Sie Details aller Anfragen und Antworten auf, einschließlich Header-Informationen, Anfragetext und Metadaten.

Java-Code-Methode

Sie können die Protokollebene auch basierend auf Java-Code ändern, indem Sie zuerst eine Klasse und dann ein Logger.Level-Objekt deklarieren:

public class DefaultFeignConfiguration  {
    
    
    @Bean
    public Logger.Level feignLogLevel(){
    
    
        return Logger.Level.BASIC; // 日志级别为BASIC
    }
}

Wenn Sie global wirksam werden möchten , fügen Sie es in die Annotation @EnableFeignClients der Startup-Klasse ein:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

Global wirksam werden
Wenn es lokal wirksam ist , fügen Sie es in die entsprechende @FeignClient-Annotation ein:

@FeignClient(value = "user-service", configuration = DefaultFeignConfiguration .class) 

Teilwirkung

Vorgetäuschte Nutzungsoptimierung

Die unterste Ebene von Feign initiiert HTTP-Anfragen und verlässt sich auf andere Frameworks. Die zugrunde liegende Client-Implementierung umfasst:

  • URLConnection: 默认实现, 不支持连接池, jede Anfrage ist eine neue Verbindung

Feign unterstützt die Verwendung eines Frameworks mit einer Verbindungspoolfunktion:

  • Apache HttpClient: Unterstützt Verbindungspool
  • OKHttp: Verbindungspool unterstützen

Daher besteht das wichtigste Mittel zur Verbesserung der Leistung von Feign darin , den Verbindungspool anstelle der Standard-URLConnection zu verwenden .

Hier verwenden wir zur Demonstration den HttpClient von Apache.

1), Abhängigkeiten einführen

Führen Sie die HttpClient-Abhängigkeit von Apache in die POM-Datei von order-service ein:

<!--httpClient的依赖 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

2), Verbindungspool konfigurieren (optional)

Konfiguration in application.yml von order-service hinzufügen:

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
  httpclient:
    enabled: true # 开启feign对HttpClient的支持,默认开启
    max-connections: 200 # 最大的连接数,默认200

3) Überprüfung: Weglassen

Empfohlene Vorgehensweise

Einzelne Module extrahieren

Extrahieren Sie den Client von Feign als unabhängiges Modul, fügen Sie das POJO für die Schnittstelle und die Standardkonfiguration von Feign in dieses Modul ein und stellen Sie es allen Verbrauchern zur Verfügung.

Beispielsweise werden die Standardkonfigurationen von UserClient, User und Feign alle in ein feign-api-Paket extrahiert, und alle Microservices können direkt verwendet werden, indem auf dieses Abhängigkeitspaket verwiesen wird.

1. Erstellen Sie zunächst ein Modul mit dem Namen feign-api und führen Sie dann Abhängigkeiten in feign-api ein

<!--openfeign依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<!--httpclient基于连接池的调用-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

2. Kopieren Sie dann UserClient, User und DefaultFeignConfiguration, die in order-service geschrieben wurden, in das feign-api-Projekt.
Der Grad der Modulextraktion
3. Löschen Sie Klassen oder Schnittstellen wie UserClient, User und DefaultFeignConfiguration in order-service.
4. Führen Sie die Abhängigkeit von feign-api in die POM-Datei von order-service ein

Die Abhängigkeiten von openfeign und httpclient im order-service können auskommentiert werden

Ändern Sie alle Paketimportteile, die sich auf die oben genannten drei Komponenten im Bestellservice beziehen, und ändern Sie sie in Importpakete in feign -
api 6. Lösungsmethode 1:
Servicefehler


Geben Sie die Pakete an, die Feign scannen soll:

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

Zu scannende Pakete
Methode 2:

Geben Sie die Client-Schnittstelle an, die geladen werden muss (nicht empfohlen)

@EnableFeignClients(clients = {
    
    UserClient.class})

Supongo que te gusta

Origin blog.csdn.net/ImisLi/article/details/128728533
Recomendado
Clasificación