Im Spring Cloud Netflix Stack enthält jeder Microservice seine eigenen Dienste in Form einer HTTP -Schnittstelle, sodass ein HTTP -Client beim Aufrufen eines Remote -Dienstes verwendet werden muss. Wir können JDK native urlConnection, den HTTP -Client von Apache, den Asynchronous HTTP -Client von Netty und Spring's RestTemplate verwenden. Die bequemste und eleganteste Sache, die zu bedienen ist, ist jedoch vor vatlaut.
Einführung in Täuschung
TEIGN ist ein deklarativer, vorliegender HTTP -Client. Mithilfe von TEIGN in Spring Cloud können wir dieselbe Codierungserfahrung wie die Aufruf lokaler Methoden erzielen, wenn wir Remote -Dienste mithilfe von HTTP anfordern. Der Entwickler kann nicht vollständig erkennen, dass dies eine Remote -Methode ist, und es kann auch nicht ersichtlich sein, dass es sich um eine HTTP -Anforderung handelt. Zum Beispiel:
@AutowiredPrivate addioNopremoteService Service; // Remote Service Public AdvertGroupvo Foo (Integer GroupID) {return Service.findbyGroupId (GroupID); // Remote -Dienst über http} rufen Entwickler können den Prozess des Sendens von HTTP -Anforderungen abschließen, HTTP -Dekodieren zurückgeben und in Objekte über service.findByGroupId() einkapseln.
Definition von Täuschung
Damit vor Vated wissen, welche Adresse eine Anfrage an die Anforderung an eine Methode und welche Parameter für die Anfrage gesendet werden soll, müssen wir eine Schnittstelle definieren:
@FEIGNCLIENT (name = "ea") // [a] public interface advertGroupremoteService {@RequestMapping (value = "/Group/{GroupId}", method = RequestMethod.get) // [b] AdvertGroupvo findByByByByByByByByByByByGroupId (@Patparable ("Groupid") adgGroupid) //cluping ("valueInien") adgaGroupId) //cluping ("valueInien") adgaGroupId) //h] @RequestMaping ("crogent-") adg. "/Group/{GroupID}", Method = RequestMethod.put) void Update (@PathVariable ("GroupId") Integer GroupID, @RequestParam ("GroupName") String GroupName)A: @FEIGNCLIENT wird verwendet, um vor vortragenkomponenten zu benachrichtigen, um die Schnittstelle zu proxy (keine Schnittstellen -Implementierung zu schreiben), und der Benutzer kann sie direkt über @autowired injizieren.
B: @RequestMapping bedeutet, dass Sie beim Aufrufen dieser Methode eine GET -Anforderung an /group/{groupId} senden müssen.
C: @PathVariable hat die gleiche Bedeutung wie die entsprechende Annotation in SpringMVC.
Wenn die Spring -Cloud -Anwendung gestartet wird, scannt Feigd die mit der @Feignclient -Annotation gekennzeichnete Schnittstelle, generiert einen Proxy und registriert sie in den Federcontainer. Beim Generieren eines Proxy erstellt FEIGE ein Requettemplate -Objekt für jede Schnittstellenmethode. Dieses Objekt fasst alle für HTTP -Anforderungen erforderlichen Informationen zusammen. Der Name der Anforderungsparameter, die Anforderungsmethode und andere Informationen werden in diesem Prozess ermittelt. Die Templatisierung von Tet wird hier reflektiert.
In diesem Beispiel verwenden wir vorgeschlagen in Kombination mit Eureka und Ribbon ,@FeignClient(name = "ea") bedeutet, vor Vat zu benachrichtigen, Eureka für einen Dienst mit dem Namen EA abzufragen, wenn er diese Schnittstellenmethode aufruft, um die Service -URL zu erhalten.
Vorgegeben
Der Prozess der Serialisierung des Methodenparameterobjekts in der Methodensignatur in die Anforderungsparameter und das Einstellen in eine HTTP -Anforderung wird vom Encoder (Encoder) abgeschlossen. In ähnlicher Weise erfolgt die Deserialisierung von HTTP -Antwortdaten in Java -Objekte von einem Decoder (Decoder).
Standardmäßig konvertiert Feign Parameter, die mit @RequestParam -Annotation in Saiten gekennzeichnet und zur URL hinzugefügt und die Parameter ohne Anmerkungen in JSON über Jackson umgewandelt werden, um sie in die Anforderungskörper zu versetzen. Beachten Sie, dass, wenn die Methode in @RequetMapping die Anforderungsmethode als Post angibt, alle unnötigen Parameter ignoriert werden, z. B.:
@RequestMapping (value = "/Group/{GroupID}", method = RequestMethod.get) void Update (@PathVariable ("GroupId") Integer GroupID, @RequestParam ("GroupName") String GroupName, DataObject OBJ);Zu diesem Zeitpunkt wird der OBJ -Parameter ignoriert, da die GET -Anfrage keine Anfrage -Einrichtung hat.
In der Frühlings -Cloud -Umgebung wird FEIGN -Encoder* nur verwendet, um Parameter zu codieren, die nicht zur Annotation hinzugefügt wurden. Wenn Sie den Encoder anpassen, wird Ihr Encoder nur beim Codieren des OBJ -Parameters aufgerufen. Für Decoder delegiert die Standarddelegaten der Mappingjackson2HttpMessageConverter -Klasse in SpringMVC zum Dekodieren. ErrordeCoder wird nur aufgerufen, wenn der Statuscode nicht zwischen 200 und 300 liegt. Die Funktion des ErreordeCoders besteht darin, eine Ausnahme zurückzugeben, die auf HTTP -Antwortinformationen basiert, die dort festgehalten werden können, wo die vorstellbare Schnittstelle aufgerufen wird. Derzeit verwenden wir ErreordeCoder, um die vorgetäuschende Schnittstelle eine geschäftliche Ausnahme für den Anrufer auszulösen.
HTTP -Client von vorschreiben
Standardmäßig verwendet FEILL JDK Native UrlConnection, um HTTP -Anfragen zu senden. Es gibt keinen Verbindungspool, aber für jede Adresse wird eine lange Verbindung beibehalten, dh die Persistenzverbindung von HTTP wird verwendet. Wir können den ursprünglichen HTTP-Client von Feign durch den HTTP-Client von Apache ersetzen, wodurch die Steuerfunktionen in engem Zusammenhang mit der Leistung wie Verbindungspools, Timeouts usw. erhalten werden. Spring Cloud unterstützt diesen Ersatz seit der Brixion.sr5-Version, zuerst den Apache-HTTP-Client und feign-httpclient -Abhängigkeiten im Projekt:
<!-Ersetzen Sie vortreste native httpclient durch apache httpclient-> <abhängigkeit> <gruppe> org.apache.httpcomponents <version> $ {feign-httpclient} </Version> </abhängig>Fügen Sie dann application.Properties hinzu:
feign.httpclient.enabled = true
Zusammenfassen
Durch vorgeordnete HTTP -Remote -Anrufe können für Entwickler HTTP -Remote -Anrufe vollständig transparent machen und ein Codierungserlebnis erhalten, das mit dem Aufruf lokaler Methoden übereinstimmt. Dies ähnelt der Art und Weise, wie Fernbedienungen in Alibaba Dubbo ausgesetzt sind. Der Unterschied besteht darin, dass Dubbo auf einem privaten Binärprotokoll basiert, während TEFIG im Wesentlichen ein HTTP -Client ist. Wenn Sie Spring Cloud Netflix zum Erstellen von Microservices verwenden, ist TEFIG zweifellos die beste Wahl.
Die oben genannte Methode (empfohlen) für die Verwendung von Spring Cloud Feig als HTTP -Client, um Remote -HTTP -Dienste (empfohlen) aufzurufen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!