minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Se houver apenas um servidor do centro de registro, haverá um único ponto de falha e ele não poderá ser processado com alta simultaneidade, portanto, será necessário um cluster.
Prepare três EurekaServers para se registrarem entre si, o que significa que cada EurekaServer precisa se registrar em todos os EureakServers, incluindo ele mesmo. Cada EurekaServer atua como servidor e cliente. Nossos outros microsserviços (pedido, usuário) só precisam apontar o endereço de registro para todos os EurekaServers.
O que é usado aqui é um módulo Eureka, que configura vários arquivos yml para obter o efeito de cluster.
- 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>
Para fornecer simultaneidade, às vezes o mesmo provedor de serviços pode implantar vários (serviços de commodities). Este cliente deve completar a chamada de carga de acordo com uma determinada estratégia de balanceamento responsável ao chamar.
- 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
Através do RestTmplate, conclua a chamada de serviço com url
Implementação de código (lado do consumidor de serviço):
- 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 é um projeto de código aberto de serviço de camada intermediária em nuvem lançado pela Netflix. Sua principal função é fornecer algoritmo de balanceamento de carga do cliente. O componente cliente Ribbon fornece uma série de itens de configuração completos, como tempo limite de conexão, nova tentativa, etc. Simplificando, o Ribbon é um balanceador de carga do cliente. Podemos listar todas as máquinas por trás do balanceador de carga no arquivo de configuração, e o Ribbon irá ajudá-lo automaticamente a se conectar com base em certas regras (como pesquisa simples, conexões aleatórias, etc.). máquinas, podemos facilmente usar o Ribbon para implementar algoritmos de balanceamento de carga personalizados. Ribbon é um balanceador de carga de cliente que pode concluir chamadas de balanceamento de carga para várias instâncias de serviço de um serviço de acordo com determinadas regras. Essas regras também oferecem suporte à personalização.
Esquemático:
OpenFeign é um cliente de serviço Web declarativo cujo objetivo é facilitar as chamadas de serviços Web. Feign fornece um modelo de interface para solicitações HTTP (o endereço de acesso está marcado nela). Ao escrever uma interface simples e inserir anotações, você pode definir os parâmetros, formato, endereço e outras informações da solicitação HTTP. OpenFeign fará proxy completo de solicitações HTTP (proxy dinâmico). Precisamos apenas chamá-lo como um método para concluir a solicitação de serviço e o processamento relacionado. Feign integra Ribbon e Hystrix (falaremos sobre Hystrix mais tarde), de modo que não precisamos mais usar esses dois componentes explicitamente.
Ao configurar diferentes subclasses de IRule, é possível escolher diferentes estratégias de balanceamento de carga, ou seja, selecionar um serviço da lista de serviços com uma estratégia específica para concluir a chamada. Claro que também pode ser personalizado. Portanto, as estratégias de balanceamento de carga podem ser divididas em integradas e personalizadas.