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
- Создайте модуль, добавьте клиентскую зависимость Eureka в pom.xml и зарегистрируйте его в центре регистрации.Добавьте следующий код:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
- Создайте файл конфигурации 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.
- Создайте класс запуска со следующим кодом:
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) Запустите центр регистрации, а затем запустите два экземпляра провайдера соответственно. Откройте центр регистрации, и вы увидите следующую информацию:
(2) Запустите ленту, и вы увидите экземпляр RIBBON в центре регистрации следующим образом:
(3) Протестируйте интерфейс индекса, и вы увидите, что порты отображаются поочередно, и результаты следующие:
4. Итоги
этого времени Код использует метод Ribbon+RestTemplate для реализации балансировки нагрузки вызовов службы.Клиент вызывает поставщика службы путем опроса по умолчанию, и два экземпляра поставщика отвечают попеременно. Но этот метод разработки можно упростить.В реальной разработке есть более удобный способ, который тоже может реализовать такую функцию.Ждите следующей моей статьи Spring Cloud (7): Feign declarative interface call .
Один инженер-разработчик также находится на стадии непрерывного обучения, и время от времени делится обычным небольшим опытом. Надеюсь, что те, кто прочитает написанный мной текст, смогут избежать обходных путей и желаю вам успехов в работе и учебе.
У блоггеров ограниченный опыт, если есть какие-либо недостатки, добро пожаловать на общение и совершенствование вместе ~ Я надеюсь добиться прогресса вместе с вами, которые также находятся в CSDN.Автор | Sweet Little Sweet Potato
Произведено | Little Sweet Potato