Spring Cloud (6): балансировка нагрузки ленты

1. История

В предыдущем исследовании мы использовали RestTemplate для реализации обращения потребителя службы к поставщику службы.Если в конкретном бизнес-сценарии количество обращений к службе внезапно значительно увеличивается, на этот раз нам нужно вызвать службу Реализовать балансировку нагрузки для соответствовать высоким условиям одновременного доступа. В крупномасштабных распределенных проектах необходима балансировка нагрузки, поэтому для ее достижения можно использовать Ribbon.

2. Что такое лента

Лента является компонентом Sping Cloud. Spring Cloud Ribbon — это решение для балансировки нагрузки. Ribbon — это балансировщик нагрузки, выпущенный Netflix. Spring интегрирует его. Spring Cloud Ribbon реализован на основе ленты Netflix. Spring Cloud Ribbon также используется совместно с Eureka Server, потому что он также зарегистрирован в реестре. После регистрации Ribbon в центре регистрации Ribbon может автоматически помогать потребителям услуг вызывать интерфейсы на основе определенного алгоритма балансировки нагрузки, такого как циклический, случайный, взвешенный циклический, взвешенный случайный и т. д. Разработчики также могут настраивать ленту в соответствии с конкретными потребностями. Алгоритм балансировки нагрузки. В реальной разработке используется Spring Cloud Eureka.Eureka Server предоставляет список всех поставщиков услуг, к которым можно обращаться. Лента выбирает конкретные экземпляры для вызова от этих поставщиков услуг на основе определенного алгоритма балансировки нагрузки. Пример изображения выглядит следующим образом:
вставьте сюда описание изображения

3. Фактический бой, быстрое создание экземпляра Ribbon

  1. Создайте модуль, добавьте клиентскую зависимость Eureka в pom.xml и зарегистрируйте его в центре регистрации.Добавьте следующий код:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	<version>2.0.2.RELEASE</version>
</dependency>
  1. Создайте файл конфигурации application.yml, информация о конфигурации выглядит следующим образом:
server:
  port: 8040
spring:
  application:
    name: ribbon
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true
属性说明
  • spring.application.name : имя текущей службы, зарегистрированной на сервере Eureka.

  • eureka.client.service-url.defaultZone : адрес доступа к реестру.

  • eureka.instance.prefer-ip-address : регистрировать ли IP текущей службы на Eureka Server.

  1. Создайте класс запуска со следующим кодом:
package com.zing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class RibbonApplication {
    
    
	public static void main(String[] args) throws Exception {
    
    
		SpringApplication.run(RibbonApplication.class, args);
	}
	
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
    
    
		return new RestTemplate();
	}

}
注解说明:
  • @Bean: вставьте экземпляр в контейнер IOC через аннотацию @Bean. Фактически, @SpringBootApplication эквивалентен использованию свойств по умолчанию @Configuration, @EnableAutoConfiguration и @ComponentScan, а @Bean — это аннотация уровня метода, которая в основном используется в классах, аннотированных @Configuration. в xml-файле. @Bean эквивалентен тегу bean-компонента.

  • @LoadBalanced: объявить балансировку нагрузки на основе ленты. После пометки этой аннотации RestTemplate имеет возможность балансировки нагрузки клиента.

4. Код уровня контроллера реализован следующим образом:

package com.zing.controller;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.zing.entity.Student;

@RestController
@RequestMapping("/ribbon")
public class RibbonHandler {
    
    
	
	@Autowired
	private RestTemplate restTemplate;
	
	@GetMapping("/findAll")
	public Collection<Student> findAll(){
    
    
		return restTemplate.getForObject("http://provider/student/findAll", Collection.class);
	}
	
	@GetMapping("/index")
	public String index() {
    
    
		return restTemplate.getForObject("http://provider/student/index", String.class);
	}
	
}
  1. Тестовый интерфейс
    (1) Запустите центр регистрации, а затем запустите два экземпляра провайдера соответственно. Откройте центр регистрации, и вы увидите следующую информацию:
    вставьте сюда описание изображения
    (2) Запустите ленту, и вы увидите экземпляр RIBBON в центре регистрации следующим образом:
    вставьте сюда описание изображения
    (3) Протестируйте интерфейс индекса, и вы увидите, что порты отображаются поочередно, и результаты следующие:
    вставьте сюда описание изображения
    вставьте сюда описание изображения
    4. Итоги
    этого времени Код использует метод Ribbon+RestTemplate для реализации балансировки нагрузки вызовов службы.Клиент вызывает поставщика службы путем опроса по умолчанию, и два экземпляра поставщика отвечают попеременно. Но этот метод разработки можно упростить.В реальной разработке есть более удобный способ, который тоже может реализовать такую ​​функцию.Ждите следующей моей статьи Spring Cloud (7): Feign declarative interface call .

Один инженер-разработчик также находится на стадии непрерывного обучения, и время от времени делится обычным небольшим опытом. Надеюсь, что те, кто прочитает написанный мной текст, смогут избежать обходных путей и желаю вам успехов в работе и учебе.
У блоггеров ограниченный опыт, если есть какие-либо недостатки, добро пожаловать на общение и совершенствование вместе ~ Я надеюсь добиться прогресса вместе с вами, которые также находятся в CSDN.

Автор | Sweet Little Sweet Potato
Произведено | Little Sweet Potato

рекомендация

отblog.csdn.net/qq_36836370/article/details/130871582