2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
S'il n'y a qu'un seul serveur de centre d'enregistrement, il y aura un seul point de défaillance et il ne pourra pas être traité avec une concurrence élevée, un cluster est donc requis.
Préparez trois EurekaServers pour qu'ils s'enregistrent les uns auprès des autres, ce qui signifie que chaque EurekaServer doit s'enregistrer auprès de tous les EureakServers, y compris lui-même. Chaque EurekaServer agit à la fois comme serveur et comme client. Nos autres microservices (commande, utilisateur) n'ont qu'à pointer l'adresse d'enregistrement vers tous les EurekaServers.
Ce qui est utilisé ici est un module Eureka, qui configure plusieurs fichiers yml pour obtenir l'effet de clustering.
- package org.example;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
-
- /**
- * @ClassName EurekaStart
- * @Author 23
- * @Date 2024/7/10 19:12
- * @Version 1.0
- * @Description TODO
- **/
- @SpringBootApplication
- @EnableEurekaServer
- public class EurekaStart {
- public static void main(String[] args) {
- SpringApplication.run(EurekaStart.class,args);
- }
- }
- spring:
- profiles:
- active: peer3
- ---
- spring:
- profiles: peer1
- application:
- name: Eureka1
- eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:10070/eureka/
- server:
- port: 10070
- ---
- spring:
- profiles: peer2
- application:
- name: Eureka2
- eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:10071/eureka/
- server:
- port: 10071
- ---
- spring:
- profiles: peer3
- application:
- name: Eureka3
- eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:10072/eureka/
- server:
- port: 10072
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 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>
- <parent>
- <groupId>org.example</groupId>
- <artifactId>Springcloud-Netflix</artifactId>
- <version>1.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>Eureka-Service</artifactId>
- <packaging>jar</packaging>
-
- <name>Eureka-Service</name>
- <url>http://maven.apache.org</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- </dependency>
- <!-- Eureka服务端支持 -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- </dependencies>
- </project>
Afin d'assurer la concurrence, le même fournisseur de services peut parfois en déployer plusieurs (services de base). Ce client doit effectuer l'appel de charge selon une certaine stratégie d'équilibrage responsable lors de l'appel.
- spring:
- profiles:
- active: order2
- ---
- server:
- port: 10010
- spring:
- profiles: order1
- application:
- name: order-service
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:10072/eureka
- instance:
- prefer-ip-address: true
- ---
- server:
- port: 10012
- spring:
- profiles: order2
- application:
- name: order-service
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:10072/eureka
- instance:
- prefer-ip-address: true
Via RestTmplate, complétez l'appel de service avec l'URL
Implémentation du code (côté consommateur du service) :
- package org.example.Controller;
-
- import org.example.domain.Order;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cloud.client.ServiceInstance;
- import org.springframework.cloud.client.discovery.DiscoveryClient;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- import java.util.Arrays;
- import java.util.List;
-
- /**
- * @ClassName UserController
- * @Author 23
- * @Date 2024/7/10 18:52
- * @Version 1.0
- * @Description TODO
- **/
- @RestController
- @RequestMapping("/User")
- public class UserControllerrlb {
- @Autowired
- private RestTemplate restTemplate;
- // @Autowired
- // private DiscoveryClient discoveryClient;
- @GetMapping("/getOrder/{id}")
- public List<Order> getOrderById(@PathVariable("id") Integer id) {
- // Order[] order = restTemplate.getForObject("http://localhost:10010/OrderService/user/" + id, Order[].class);
- // return Arrays.asList(order);
- // List<ServiceInstance> instances=discoveryClient.getInstances("order-service");//通过服务的名字去获取服务实例
- // ServiceInstance serviceInstance=instances.get(0);//定死只获取第一个服务实例对象
- // String ip=serviceInstance.getHost();//获取服务对象ip
- // int port=serviceInstance.getPort();//获取获取的实例对象的服务端口号
- Order[] orders=restTemplate.getForObject("http://Order-Service/OrderService/user/"+id,Order[].class);
- return Arrays.asList(orders);
-
- }
- }
Ribbon est un projet open source de service cloud de couche intermédiaire publié par Netflix. Sa fonction principale est de fournir un algorithme d'équilibrage de charge client. Le composant client Ribbon fournit une série d'éléments de configuration complets, tels que le délai d'expiration de la connexion, la nouvelle tentative, etc. En termes simples, Ribbon est un équilibreur de charge client. Nous pouvons lister toutes les machines derrière l'équilibreur de charge dans le fichier de configuration, et Ribbon vous aidera automatiquement à vous connecter en fonction de certaines règles (telles qu'une simple interrogation, des connexions aléatoires, etc.). machines, nous pouvons facilement utiliser Ribbon pour implémenter des algorithmes d’équilibrage de charge personnalisés. Ribbon est un équilibreur de charge client qui peut effectuer des appels d'équilibrage de charge pour plusieurs instances de service d'un service selon certaines règles. Ces règles prennent également en charge la personnalisation.
Schématique:
OpenFeign est un client de service Web déclaratif dont le but est de faciliter les appels de services Web. Feign fournit un modèle d'interface pour les requêtes HTTP (l'adresse d'accès y est marquée). En écrivant une interface simple et en insérant des annotations, vous pouvez définir les paramètres, le format, l'adresse et d'autres informations de la requête HTTP. OpenFeign proxyera complètement les requêtes HTTP (proxy dynamique). Il nous suffit de l'appeler comme une méthode pour terminer la demande de service et le traitement associé. Feign intègre Ribbon et Hystrix (nous parlerons d'Hystrix plus tard), de sorte que nous n'avons plus besoin d'utiliser explicitement ces deux composants.
En configurant différentes sous-classes d'IRule, vous pouvez choisir différentes stratégies d'équilibrage de charge, c'est-à-dire sélectionner un service dans la liste des services avec une stratégie spécifique pour terminer l'appel. Bien entendu, il peut également être personnalisé. Par conséquent, les stratégies d’équilibrage de charge peuvent être divisées en stratégies intégrées et personnalisées.