Vorwort: Die Microservice -Architektur hat unweigerlich mehrere Instanzen eines einzelnen Microservice. Wie kann der Client Anforderungen an Instanzen mehrerer Microservices zuweisen? Hier müssen wir Lastausgleich verwenden
1. Einführung in das Band
Ribbon ist ein von Netflix freigegebener Lastausgleich, der das Verhalten von HTTP- und TCP -Clients steuert. Nach der Konfiguration der Diensteanbieter -Adressliste für das Gelibbon kann das Colreen automatisch dazu beitragen, dass Verbraucher basierend auf einem Lastausgleichsalgorithmus anfordern. Das Ribbon bietet uns standardmäßig viele Lastausgleichalgorithmen wie Umfragen, Zufälligkeit usw., die ebenfalls angepasst werden können.
Ribbon's GitHub: https://github.com/netflix/ribbon
Bei der Verwendung von Ribbon und Eureka in SpringCloud wird das Band automatisch die Liste der Dienstanbieteradressen von Eurekaserver und basierend auf dem Lastausgleichsalgorithmus erhalten.
2. Ribbon Tatsächlicher Kampf
1. Erstellen Sie Eurekaserver, Eurekaclient1, Eurekaclient2. Ich habe die Verwendung von Eureka schon einmal erwähnt, also hier ist der Code:
Eurekaserver:
ServerApplication.java
@SpringBootApplication@enableEureKaserverPublic Class ServerApplication {public static void main (String [] args) {SpringApplication.run (serverApplication.class, args); }}pom.xml
<? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cn</groupId> <artifactid> eureka-ribbon-server </artifactId> <version> 1.0-Snapshot </Version> <properties> <projekt.build.SourceEncoding> utf-8 </Project.build.SourceEncoding> <java.version> 1.8 </java.version> <SupructId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Parent </artifactId> <version> 1.5.13.Release </Version> </parent> <Depelen> <abhängigkeit> <gruppe org.springFramework. <gruppeId> org.springframework.cloud </Groupid> <artifactId> Spring-Cloud-Starter-Eureka-Server </artifactid> </abhängig> </abhängig> </abhängig> </abhängig> <abhängig <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependency> </dependencyManagement> <!-- Add spring-boot maven plugin--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactid> Spring-Boot-Maven-Plugin </artifactId> </plugin> </plugins> </build> </project>
application.Properties
Server.port = 8761#Hinweis: Diese beiden Konfigurationen sind standardmäßig wahr. Sie müssen sich in Falsch ändern, andernfalls wird ein Fehler gemeldet. Connot Connect Server# gibt an, ob sich selbst auf eurekaserver eureka.client.register-with-eureka = false# angeben soll, ob Registrierungsinformationen von eurekaserver eureka.client.fetch-registry = falseeurka.client.client.Service-url.defaultzone = http.
Eurekaclient1:
pom.xml
<? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cn</groupId> <artifactId>eureka-ribbon-client</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.13.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </abhängig> <depeencing> <gruppe> org.springframework <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependency> </dependencyManagement> <!-- Add spring-boot maven plugin--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactid> Spring-Boot-Maven-Plugin </artifactId> </plugin> </plugins> </build> </project>
server.port = 8762spring.application.name = client-8762eureka.client.service-url.defaultzone = http: // localhost: 8761/eureka/
Fügen Sie dem Container in der Startklasse RastTemplate -Remote -Anrufinstanz hinzu und fügen Sie eine Ladeausbalanced -Annotation hinzu, um restTemplate zu erstellen, um das Ausgleich zu laden:
@SpringBootApplication@enablediscoveryClientPublic clientApplication {public static void main (String [] args) {SpringApplication.run (ClientApplication.Class, Args); }/** * @Description: Hinzufügen der @LoadBalanced Annotation zum Hinzufügen von Ladeausgleichsfunktionen zu rastTemplate * @param: * @return: * @Author: * @date: 2018/6/15 */@Bean @loadBalanced public restTemplate GetRestTemplate () {) return New rastTemplate (); }}Erstellen Sie einen Controller-, Inject RestTemplate- und LoadBalancerClient -Instanzen:
Paket com.cn.controller; import org.springframework.bean.factory.annotation.autowired; org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.ResponseBody; 15:55 **/ @ControllerPublic Class RibbonController {@autowired Private LoadBalancerClient LoadBalancerClient; @Autowired Private rastTemplate rastTemplate; @GetMapping ("/loadInstance") @ResponseBody public String loadInstance () {serviceInstance wählen Sie = this.LoadBalancerClient.choose ("client-87"); System.out.println (wählen. return woice.getServicId () + ":" + wählen. Gethost () + ":" + wählen.getPort (); }} Paket com.cn; import org.springframework.boot.springapplication; import org.springframework 535504 *@create: 2018-06-15 16:05 **/@SpringbootApplication@enablediscoveryClientPublic ClassApplication {public static void main (String [] args) {SpringApplication.run (ClientApplication.Class, Argumente); }}Eurekaclient2:
pom.xml stimmt mit eurekaclient1 überein
application.xml:
server.port = 8763spring.application.name = client-87eureka.client.service-url.DefaultZone = http: // localhost: 8761/eureka
ClientController.java:
Paket com.cn.contorller; import org.springframework.steretype.controller; import org.springframework.web.bind.Annotation.getMapping; @create: 2018-06-15 16:12 **/ @ControllerPublic Class ClientController {@getmapping ("/getUser") @ResponseBody public String getUser () {System.out.println ("Get Benutzer erfolgreich"); Rückgabe "Get Benutzer erfolgreich"; }}2. Start -up -Sequenz:
①. Starten eurekaserver =》 eurekaclient1 =》 eurekaclient2;
②. Dann ändern Sie den Server.port = 8763 der Anwendung.
③. Öffnen Sie die Eurekaserver -Konfigurationsseite (http: // localhost: 8761/) wie folgt:
④. Wir geben http: // localhost: 8762/loadInstance in der Adressleiste ein und aktualisieren es einige Male. Sie werden feststellen, dass die Portinstanzen jedes Mal unterschiedlich sind, wenn wir sie aufrufen, wie in der folgenden Abbildung gezeigt:
⑤. Wir schauen auf die Konsole, wie im Bild gezeigt:
Zu diesem Zeitpunkt hat Ribbon bereits begonnen. Ist es nicht sehr einfach? Aber dies ist nur die einfachste Anwendung, und es ist Zeitverschwendung ... es gibt kein Ende des Lernens!
Beispielcode: https://gitee.com/lfalex/springcloud-plample