Введение
Мы продолжаем опираться на код из предыдущих блогов и добавлять компоненты ленты, чтобы обеспечить балансировку нагрузки клиента. Балансировка нагрузки является важной частью достижения высокой параллелистики, высокой производительности, масштабируемых услуг. Он может распространять запросы на разные серверы в кластере, чтобы снять бремя на каждом сервере. Балансировка нагрузки клиента запускается в клиентских программах, таких как наш веб -проект, а затем случайным образом выбирает сервер для отправки запросов путем получения списка IP -адресов кластера. По сравнению с балансировкой нагрузки на сервер, он не требует потребления ресурсов сервера.
Основная среда
Git: исходный код проекта
Обновление конфигурации
На этот раз нам нужно запустить две программы обслуживания продуктов локально для проверки балансировки нагрузки, поэтому нам нужно предоставить разные порты для второй программы. Конфигурация сервисного центра конфигурации Spring Configuration по умолчанию будет переопределять переменные среды локальной системы. Нам необходимо установить порт службы продуктов через переменные системной среды, поэтому нам необходимо изменить файл конфигурации Службы продукта в репозитории GIT Центра конфигурации.
Сервер: порт: 8081spring: Cloud: Config: Alling-Override: True переопределяющаяся система-сигналы: false
Значение по умолчанию разрешено-оборота верно. Я написал это, чтобы объяснить это. Это означает, что элементы конфигурации центра удаленной конфигурации могут перезаписать локальную конфигурацию, а не то, что локальная конфигурация разрешена перезаписать удаленную конфигурацию. Конечно, мы можем установить его на false, но для предоставления более точных правил покрытия, значение по умолчанию сохраняется здесь.
Мы добавили переоборудование-системы-Properties = false, то есть, хотя файл конфигурации центральной конфигурационной центра может перезаписать локальную конфигурацию, не перезаписывайте локальную системную переменные. После завершения модификации отправьте его в репозиторий GIT.
Кроме того, добавьте несколько журналов в ProductController проекта Productservice, чтобы проверить, эффективна ли балансировка нагрузки:
Пакет cn.zxuqian.controllers; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.bindtation.requestmapping; import org.springframework.web.bindtation.RestControler; static logger log = loggerfactory.getLogger (productController.class); @Requestmapping (" /products") public String productlist () {log.info ("доступ к /продукты конечная точка"); вернуть "пальто, куртка, свитер, футболка"; }}Настройка ленты для Интернета
Сначала добавьте зависимости ленты в pom.xml:
<Dependency> <groupId> org.springframework.cloud </GroupId> <ArtifactId> Spring-Cloud-Starter-Netflix-Ribbon </artifactid> </depertive>
Затем измените класс приложения и добавьте следующий код:
@EnableCircuitBreaker@enabledIscoveryClient@ribbonClient (name = "product-service")@springbootapplicationpublic class application {public static void main (string [] args) {springApplication.run (application.class, args); } @Bean @loadbalanced public resttemplate rest (ResttemplateBuilder Builder) {return Builder.build (); }} Здесь мы используем аннотацию @RibbonClient (name = "service"), чтобы отметить этот проект как клиент балансировки ленточной нагрузки. Он должен выбрать один из кластеров обслуживания продуктов для доступа к требуемым сервисам. Атрибут имени здесь соответствует атрибуту spring.application.name, настроенный в проекте Productservice.
Аннотация @loadbalanced указывает, что Resttemplate будет настроен на автоматическое использование ленточной ленты для выбора URI службы и отправить запрос.
Мы добавляем следующий код в класс Productservice:
@Servicepublic class productservice {private final resttemplate resttemplate; @Autowired Private DiscoveryClient DiscoveryClient; public productservice (Resttemplate Resttemplate) {this.RestTemplate = RestTemplate; } @Hystrixcommand (sharkbackmethod = "backupproductlist") public String productlist () {list <serviceInsant> emestans = this.discoveryclient.getInstances ("service продукта"); if (экземпляры! = null && emestances.size ()> 0) {return this.resttemplate.getforobject (emances.get (0) .geturi () + "/products", string.class); } возвращаться ""; } public String backupproductlist () {return "jack, sweater"; } public String ProductLideLANDAND () {return this.RestTemplate.getForObject ("http: // product-service/products", string.class); }}Здесь был добавлен новый метод ProductListraduanced, который доступен к тому же сервису, что и предыдущий метод ProductList, но он балансирует нагрузкой с клиентом ленты. Здесь хозяин URI стал именем службы, которая будет доступна, которая согласуется с атрибутом имени, настроенным в @RibbonClient. Наконец, добавьте следующий код в наш ProductController:
@RestControllerPublic Class ProductController {@Autowired ProductService Productservice; @Requestmapping ("/products") public String productList () {return productservice.productlist (); } @RequestMapping ("/productslb") public String productLideLAND () {return productservice.productlistLoadBalanced (); }}Чтобы создать метод, который специально обрабатывает /ProductsLB -запросы, и вызовите Productervie для обеспечения балансировки нагрузки.
На этом этапе наш код завершен. Код кажется простым, но на самом деле все конфигурации используют значения по умолчанию. Лента обеспечивает методы программирования и конфигурации для настройки ленточного клиента. Позвольте мне кратко представить вам. Когда вы углубитесь в ленту, давайте посмотрим, как изменить его конфигурацию. Лента обеспечивает следующую конфигурацию (интерфейс слева, а реализация по умолчанию находится справа):
Поскольку наш проект использует Eureka, некоторые элементы конфигурации отличаются от реализации по умолчанию. Например, Eureka использует DiscoveryEnabledniwsserverlist вместо ribbonserverlist, чтобы получить список услуг, зарегистрированных на Eureka. Ниже есть простой класс конфигурации, с весеннего официального веб -сайта:
открытый класс sayhelloconfiguration {@autowired iclientconfig ribbonclientconfig; @Bean Public Iping Ribbonping (iClientConfig Config) {return new pingurl (); } @Bean public ribbonrule (iclientconfig config) {return new доступность filteringrule (); }}Лента не будет отправлять Ping для проверки состояния здоровья сервера по умолчанию, а по умолчанию нормальная. Затем Irune реализуется как Zoneavoidancerule по умолчанию, чтобы избежать зоны со многими проблемами с AWS EC2. Это не доступно в местной тестовой среде. Затем его заменяют на доступность FilteringRule. Это может включить функцию выключателя схемы, которая поставляется с лентой для фильтрования серверов, которые не работают должным образом.
тест
Сначала запустите наш сервис конфигурации ConfigServer, затем запустите регистрацию Eureka Registration and Discovery Service, а затем запустите два продукта. Первый-использовать плагин с пружиной: запустить для запуска, а второй-предоставить ему новый порт, который можно запустить со следующей команды:
$ Server_port = 8082 MVN Spring-Boot: Run
Наконец, запустите наш проект веб -клиента, посетите http: // localhost: 8080/productslb, а затем обновите несколько раз. Вы увидите, что две Windows командной строки, работающие с Productservice, появятся случайным образом:
Доступ к конечной точке продуктов
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.