Im vorherigen Artikel können wir feststellen, dass die erforderlichen Parameter, wenn wir die API anderer Dienste über RestTemplate aufrufen, in der angeforderten URL gespleißt werden müssen. Wenn es weniger Parameter gibt, können wir es möglicherweise tolerieren. Sobald es mehrere Parameter gibt, ist das Spleißen der Anforderungszeichenfolge ineffizient und dumm zu sein.
Gibt es also eine bessere Lösung? Die Antwort ist sicher, und Netflix hat uns einen Framework zur Verfügung gestellt: vor vat.
Feign ist ein deklarativer Webdienst -Client, und sein Ziel ist es, Webdienstanrufe einfacher zu machen. Feig liefert eine Vorlage für HTTP -Anforderungen. Durch das Schreiben einfacher Schnittstellen und Annotationen für Insertion können Sie die Parameter, Formate, Adressen und andere Informationen von HTTP -Anforderungen definieren.
FEIGN wird HTTP -Anfragen vollständig proxy proxy und wir müssen sie nur so aufrufen, wie eine Methode aufzurufen, um die Serviceanforderung und die damit verbundene Verarbeitung abzuschließen. FEIGN integriert Ribbon und Hytrix (wir werden später über Hytrix sprechen), damit wir diese beiden Komponenten nicht mehr explizit verwenden können.
Kurz gesagt, vorhanden hat vorhandene Merkmale:
Dies sieht ein bisschen wie die RequestMapping -Mapping der Controller -Schicht unseres SpringMVC -Musters aus. Dieses Muster gefällt uns wirklich. FeigN verwendet @FeignClient, um Dienste zu karten.
Der erste Schritt besteht zunächst darin, auf die ursprüngliche Basis ein neues vorgefertigtes Modul zu erstellen, dann verwandte Abhängigkeiten und Täuschung von Abhängigkeiten einzuführen, die automatisch Hystrix -Abhängigkeiten einführen, wie folgt:
<De vorhöhe> <gruppe> org.springframework <version> 1.4.0.Release </Version> </abhängig>
Die Konfiguration von Application.yml ist wie folgt:
Server: Port: 8083Spring: Anwendung: Name: Feign-Consumereureka: Client: Service-URL: StandardsZone: http: // localhost: 8888/eureka/, http: // localhost: 8889/eureka/
Im vorherigen Artikel werden dann im vorherigen Dienst für Provider1- und Provider2 -Module mehrere neue Methoden hinzugefügt, wie im folgenden Code gezeigt:
/*** Erstellt von Cong am 2018/5/8. */ @RastControllerPublic Class HelloConTroller {@RequestMapping ("/hello") public String hello () {System.out.println ("Access kommt 1 ..."); zurück "hello1"; } @RequestMapping ("/hjcs") publiclist <string> laowangs (String ids) {list <string> list = new ArrayList <> (); list.add ("laowang1"); list.add ("laowang2"); list.add ("laowang3"); Rückgabeliste; } // method @RequestMapping (value = "/hellol", method = requestMethod.get) public String Hallo (@RequestParam -Zeichenfolge) {return "hello" + name; } @RequestMapping (value = "/hello2", method = requestMethod.get) öffentlicher Benutzer Hallo (@RequestHeader String -Name, @RequestHeader Integer Age) {return neuer Benutzer (Name, Alter); } @RequestMapping (value = "/hello3", method = requestMethod.post) public String Hallo (@RequestBody -Benutzer) {return "hello"+ user. GetName () + "," + Benutzer. getage (); }}Als nächstes ist die Benutzerklasse, die für den obigen Code erforderlich ist. Der Code lautet wie folgt:
/*** Erstellt von Cong 2017/12/2. */public class User {private Zeichenfolge Name; privates Ganzzahlalter; // Es muss ein leerer Konstruktor bei der Serialisierung der Übertragung vorhanden sein, andernfalls tritt ein Fehler auf. public user () {} public user (String -Name, Integer Age) {this.name = name; this.age = Alter; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public Integer getage () {Return Age; } public void setage (Ganzzahl älter) {this.age = älter; }}Verwenden Sie als Nächstes @FeignClient ("Dienstname") von Feign, um den Serviceanruf zu erbilden. Der Code ist wie folgt:
Paket hjc; import org.springframework.cloud.netflix.fegn.Feignclient; import org.springframework.web.bind.annotation.*;/*** Erstellt von Cong am 2018/5/17. */// configuration = xxx.class Diese Klasse konfiguriert einige präzise Eigenschaften von hystrix // value = "Der Service-Name, den Sie verwendet haben" @FeignClient (value = "Hello-service", fallback = Feignfallback.class) Public Interface FeignService {// Mapping-Pfad der Methode im Service @RequestMapping ("/Hallo". @RequestMapping (value = "/hellol", method = requestMethod.get) String Hallo (@RequestParam ("Name") String -Name); @RequestMapping (value = "/hello2", method = requestMethod.get) Benutzer Hallo (@Requestheader ("Name") String -Name, @Requestheader ("Alter") Ganzzahl Age); @RequestMapping (value = "/hello3", method = requestMethod.post) String Hallo (@RequestBody -Benutzer);}Injizieren Sie dann die Schnittstelle für die the Controller in die Controller -Ebene, um Remote -Service -Anrufe durchzuführen. Der Code ist wie folgt:
/*** Erstellt von Cong am 2018/5/17. */ @RastControllerPublic Class ConsumerController {@autowired FeigNService FeignService; @RequestMapping ("//conbraucher") public String helloconsumer () {return feignService.hello (); } @RequestMapping ("/Consumer2") public String helloconsumer2 () {String r1 = FeignService.hello ("HJC"); String R2 = FeignService.hello ("HJC", 23) .ToString (); String R3 = FeignService.hello (neuer Benutzer ("HJC", 23)); return r1 + "-----" + r2 + "----" + r3; }}Dann, wo Sie den Eureka -Client in der Start -up -Klasse des Feign -Moduls @EnablediscoveryClient -Clientanmerkungen für den Modul annotieren sollen
@EnableFeignClients, der Code lautet wie folgt:@SpringbootApplication@enablediscoveryClient@enableFeignClientsSpublic Class Feignapplication {public static void main (String [] args) {SpringApplication.run (feignapplication.class, args); }}Starten Sie dann die Startkurs, geben Sie LOCALHOST: 8083/Verbraucher im Browser ein, und das Auslaufergebnis ist wie folgt:
Sie können sehen, dass die Lastausgleichsfragung Hello1 und Hello2 erscheint.
Geben Sie dann weiterhin localhost: 8083/Consumer2 im Browser ein, und das laufende Ergebnis ist wie folgt:
Als nächstes nutzen wir den Service Downgrade im Rahmen des vorgetäuschenden Deklarativ -Anrufdienstes. Anschließend müssen wir eine neue Feignfallback -Klasse erstellen, um den Wesiervice zu erben. Der Code ist wie folgt:
Paket hjc; import org.springframework.stereotype.comPonent;/*** Erstellt von Cong am 2018/5/17. */ @Componentpublic class Feignfallback implementiert Feignservice {// Die Implementierungsmethode ist eine Downgrade -Methode des Service Call @Override public String hello () {return "error"; } @Override public String Hallo (String -Name) {return "Fehler"; } @Override public user hello (String -Name, Integer Age) {neuer Benutzer zurückgeben (); } @Override public String Hallo (Benutzerbenutzer) {return "Fehler"; }}Anschließend stoppen wir die beiden Module der beiden Dienstanbietermodule und Provider2 -Module, und die laufenden Ergebnisse sind wie folgt:
Sie können sehen, dass unsere Anrufe alle herabgestuften Dienste haben.
Wenn wir dann die Parameter von hystrix genau steuern möchten, z.
Oder konfigurieren Sie es in application.yml wie folgt:
HYTRIX: Befehl: Standard: Ausführung: Isolation: Thread: TimeoutinMilliseconds: 5000Ribbon: ConnectTimeout: 500 #Wenn Sie einen separaten Dienst im Detail konfigurieren möchten, wie folgt Hello-Service: Ribbon: ConnectTimeout: 500
Dies befriedigt die Anforderungen der meisten unserer Szenarien. Wenn Sie jedoch gute Szenarien schreiben, müssen Sie immer noch native Hytrix verwenden und unserer vorherigen Verwendung von Hytrix folgen. Verwenden Sie einfach keine vortreiten Client -Anrufe wie folgt:
/*** Erstellt von Cong am 2018/5/17. */public class hjccommand erweitert hystrixcommand {protected hjccommand (hystrixCommandgroupkey -Gruppe) {Super (Gruppe); } @Override Protected Object Run () löst Ausnahme aus {return null; }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.