моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Если есть только один сервер центра регистрации, будет одна точка отказа, и ее невозможно будет обработать с высоким параллелизмом, поэтому требуется кластер.
Подготовьте три сервера EurekaServer для регистрации друг с другом. Это означает, что каждый сервер EurekaServer должен зарегистрироваться на всех серверах EurekaServer, включая самого себя. Каждый сервер EurekaServer действует как сервер и клиент. Остальным нашим микросервисам (заказ, пользователь) нужно только указать адрес регистрации всем EurekaServers.
Здесь используется модуль Eureka, который настраивает несколько файлов yml для достижения эффекта кластеризации.
- 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>
Чтобы обеспечить параллелизм, иногда один и тот же поставщик услуг может развернуть несколько (товарных сервисов). Этот клиент должен завершить вызов нагрузки в соответствии с определенной стратегией ответственной балансировки при вызове.
- 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
Через RestTmplate завершите вызов службы с помощью URL-адреса.
Реализация кода (сторона потребителя сервиса):
- 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 — это проект облачной службы среднего уровня с открытым исходным кодом, выпущенный Netflix. Его основная функция — предоставить алгоритм балансировки нагрузки клиента. Клиентский компонент ленты предоставляет ряд полных элементов конфигурации, таких как время ожидания соединения, повторная попытка и т. д. Проще говоря, Ribbon — это клиентский балансировщик нагрузки. Мы можем перечислить все машины, стоящие за балансировщиком нагрузки, в файле конфигурации, и Ribbon автоматически поможет вам подключиться на основе определенных правил (таких как простой опрос, случайные соединения и т. д.). машинах, мы можем легко использовать Ribbon для реализации пользовательских алгоритмов балансировки нагрузки. Лента — это клиентский балансировщик нагрузки, который может выполнять вызовы балансировки нагрузки для нескольких экземпляров службы в соответствии с определенными правилами. Эти правила также поддерживают настройку.
Схема:
OpenFeign — это декларативный клиент веб-службы, цель которого — упростить вызовы веб-службы. Feign предоставляет шаблон интерфейса для HTTP-запросов (на нем отмечен адрес доступа). Написав простой интерфейс и вставив аннотации, вы можете определить параметры, формат, адрес и другую информацию HTTP-запроса. OpenFeign будет полностью проксировать (динамический прокси) HTTP-запросы. Нам нужно только вызвать его как метод для завершения запроса на обслуживание и соответствующей обработки. Feign интегрирует Ribbon и Hystrix (о Hystrix мы поговорим позже), так что нам больше не нужно явно использовать эти два компонента.
Настраивая разные подклассы IRule, вы можете выбирать разные стратегии балансировки нагрузки, то есть выбирать службу из списка служб с определенной стратегией для завершения вызова. Конечно, его также можно настроить. Таким образом, стратегии балансировки нагрузки можно разделить на встроенные и пользовательские.