le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Se è presente un solo server del centro di registrazione, sarà presente un singolo punto di errore e non potrà essere elaborato con elevata concorrenza, pertanto è necessario un cluster.
Preparare tre EurekaServer per registrarsi tra loro, il che significa che ogni EurekaServer deve registrarsi con tutti gli EureakServer, incluso se stesso. Ogni EurekaServer agisce sia come server che come client. Gli altri nostri microservizi (ordine, utente) devono solo indirizzare l'indirizzo di registrazione a tutti gli EurekaServer.
Ciò che viene utilizzato qui è un modulo Eureka, che configura più file yml per ottenere l'effetto del 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>
Per garantire la concorrenza, a volte lo stesso fornitore di servizi può distribuirne più (servizi di base). Questo client deve completare la chiamata di carico secondo una determinata strategia di bilanciamento responsabile durante la chiamata.
- 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
Tramite RestTmplate, completa la chiamata di servizio con l'URL
Implementazione del codice (lato consumatore del servizio):
- 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 è un progetto open source del servizio di livello intermedio cloud rilasciato da Netflix. La sua funzione principale è fornire un algoritmo di bilanciamento del carico del client. Il componente client della barra multifunzione fornisce una serie di elementi di configurazione completi, come timeout della connessione, nuovo tentativo, ecc. In poche parole, Ribbon è un bilanciatore del carico del client. Possiamo elencare tutte le macchine dietro il bilanciatore del carico nel file di configurazione e Ribbon ti aiuterà automaticamente a connetterti in base a determinate regole (come polling semplice, connessioni casuali, ecc.) Per queste. macchine, possiamo facilmente utilizzare Ribbon per implementare algoritmi di bilanciamento del carico personalizzati. La barra multifunzione è un bilanciatore del carico client in grado di completare le chiamate di bilanciamento del carico per più istanze di un servizio in base a determinate regole. Queste regole supportano anche la personalizzazione.
Schema:
OpenFeign è un client di servizi Web dichiarativo il cui scopo è semplificare le chiamate ai servizi Web. Feign fornisce un modello di interfaccia per le richieste HTTP (su di esso è indicato l'indirizzo di accesso). Scrivendo una semplice interfaccia e inserendo annotazioni, è possibile definire i parametri, il formato, l'indirizzo e altre informazioni della richiesta HTTP. OpenFeign eseguirà completamente il proxy delle richieste HTTP (proxy dinamico). Dobbiamo solo chiamarlo come un metodo per completare la richiesta di servizio e la relativa elaborazione. Feign integra Ribbon e Hystrix (di Hystrix parleremo più avanti), in modo che non abbiamo più bisogno di utilizzare questi due componenti esplicitamente.
Configurando diverse sottoclassi IRule, è possibile scegliere diverse strategie di bilanciamento del carico, ovvero selezionare un servizio dall'elenco dei servizi con una strategia specifica per completare la chiamata. Naturalmente può anche essere personalizzato. Pertanto, le strategie di bilanciamento del carico possono essere suddivise in integrate e personalizzate.