Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Si solo hay un servidor del centro de registro, habrá un único punto de falla y no se podrá procesar con alta concurrencia, por lo que se requiere un clúster.
Prepare tres EurekaServers para registrarse entre sí, lo que significa que cada EurekaServer debe registrarse con todos los EureakServers, incluido él mismo. Cada EurekaServer actúa como servidor y cliente. Nuestros otros microservicios (pedido, usuario) solo necesitan señalar la dirección de registro a todos los EurekaServers.
Lo que se utiliza aquí es un módulo Eureka, que configura varios archivos yml para lograr el efecto de agrupación.
- 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 proporcionar simultaneidad, a veces el mismo proveedor de servicios puede implementar múltiples (servicios básicos). Este cliente debe completar la llamada de carga de acuerdo con una determinada estrategia de equilibrio responsable al llamar.
- 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
A través de RestTmplate, complete la llamada de servicio con la URL
Implementación de código (lado del consumidor del servicio):
- 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 es un proyecto de código abierto de servicio de capa intermedia en la nube lanzado por Netflix. Su función principal es proporcionar un algoritmo de equilibrio de carga del cliente. El componente del cliente Ribbon proporciona una serie de elementos de configuración completos, como tiempo de espera de conexión, reintento, etc. En pocas palabras, Ribbon es un equilibrador de carga del cliente. Podemos enumerar todas las máquinas detrás del equilibrador de carga en el archivo de configuración, y Ribbon lo ayudará automáticamente a conectarse según ciertas reglas (como sondeo simple, conexiones aleatorias, etc.) para estas. máquinas, podemos usar fácilmente Ribbon para implementar algoritmos de equilibrio de carga personalizados. Ribbon es un equilibrador de carga del cliente que puede completar llamadas de equilibrio de carga para múltiples instancias de un servicio de acuerdo con ciertas reglas. Estas reglas también admiten la personalización.
Esquemático:
OpenFeign es un cliente de servicios web declarativo cuyo propósito es facilitar las llamadas a servicios web. Feign proporciona una plantilla de interfaz para solicitudes HTTP (la dirección de acceso está marcada en ella). Al escribir una interfaz simple e insertar anotaciones, puede definir los parámetros, el formato, la dirección y otra información de la solicitud HTTP. OpenFeign representará completamente las solicitudes HTTP (proxy dinámico). Solo necesitamos llamarlo como un método para completar la solicitud de servicio y el procesamiento relacionado. Feign integra Ribbon y Hystrix (hablaremos de Hystrix más adelante), por lo que ya no necesitamos usar estos dos componentes explícitamente.
Al configurar diferentes subclases de IRule, puede elegir diferentes estrategias de equilibrio de carga, es decir, seleccionar un servicio de la lista de servicios con una estrategia específica para completar la llamada. Por supuesto, también se puede personalizar. Por lo tanto, las estrategias de equilibrio de carga se pueden dividir en integradas y personalizadas.