Статья, которая поможет вам понять Эврику Spring Cloud

Spring Cloud

Eureka

Что такое Эврика?

Eureka, разработанная Netflix, представляет собой службу на основе REST (Representational State Transfer) для поиска служб (регистрация и обнаружение служб) для достижения балансировки нагрузки и аварийного переключения служб среднего уровня.Эта служба называется Eureka Server. В то же время он также поставляется с клиентским компонентом на основе Java: Eureka Client, который упрощает взаимодействие клиентов с Eureka Server.

Ниже приведен простой процесс вызова службы:

  1. Услуга зарегистрирована на сервере Eureka поставщиком услуг.
  2. Потребитель услуг получает реальный адрес поставщика услуг через Eureka Server.
  3. Потребитель услуги вызывает услугу через реальный адрес

В процессе регистрации поставщика услуг на Eureka Server он регистрирует свои собственные метаданные (включая хост, порт и т. д. и другую пользовательскую информацию) на Eureka Server, а потребители услуг могут получить эту информацию через Eureka Server, поэтому для Eureka , он не ограничивает конкретное общение между потребителями услуг и поставщиками услуг. Они определяются потребителями услуг и поставщиками услуг. Вы можете выбрать любой способ, например HTTP, RPC, Thrift и т. д.

настоящий бой

Далее мы построим простой кластер Eureka.

выгода отSpring CloudправильноEurekaПакет делает его очень простым для нас. Прежде всего, необходимо создать каркас проекта, что можно сделать с помощьюофициальный инструментбыстро построитьSpring Cloudсреда разработки.

Во-первых, нам нужно выбрать инструмент сборки, версию Java и Spring Boot, а также заполнить основную информацию, такую ​​как groupId, ArtiftId, имя проекта и имя пакета.

Версия Spring Boot, используемая в этой серии руководств, — 2.1.8, а соответствующая версия Spring Cloud — Greenwich.SR2.

Во-вторых, вам нужно выбрать зависимости вашего проекта

Поскольку наша цель — построить кластер Eureka, нам нужно выбрать только следующие зависимости:

  • spring-boot-starter-web
  • eureka-server
  • eureka-client

Помимо этих двух, чаще используются следующие зависимости, поэтому их тоже добавляем в зависимости:

  • configuration-processor

  • lombok

  • spring-boot-starter-actuator

После завершения выбора зависимостей нажмите «Загрузить», чтобы создать базовуюSpring Cloudсреда разработки. После импорта в IDE он должен выглядеть так:

Здесь я вручную изменил два места, одно дляapplication.propertiesизменился наapplication.yml, второе - добавитьbootstrap.yml,знакомыйSpring BootСтуденты должны быть знакомы с этим файлом.

Остались некоторые приготовления, потому что нам нужно построить кластер локально, поэтому нам также нужно изменить локальныйhostsфайл (в Windows по адресу:C:\Windows\System32\drivers\etc), создайте три виртуальных доменных имени дляEureka Server. мы кhostsФайл добавляет три строки данных, указывающие localhost на три виртуальных доменных имени:

127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3

Чтобы убедиться, что изменения вступили в силу, вы можете выполнить в командной строке:ipconfig /flushdnsобновитьhosts.

После завершения настройки нам нужно выполнить простую настройку проекта.

  1. существуетbootstrap.ymlДобавьте имя приложения в:
spring:
  application:
    ## 服务的名称,可以任意修改,但是需要确保在整个系统中的唯一性
    name: eureka
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/
  1. существуетapplication.ymlДобавляем адрес реестра и три профиля и ставим разные порты
eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/
---
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1
---
spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
server:
  port: 8762
---
spring:
  profiles: peer3
eureka:
  instance:
    hostname: peer3
server:
  port: 8763

  1. Добавьте аннотации к классу запуска приложения.@EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class RegistryEurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(RegistryEurekaApplication.class, args);
	}

}

Все приготовления завершены, запускаем наш Eureka Server с разными профилями в трех терминалах:

mvn -Dmaven.test.skip=true clean install
cd target/
java -jar -Dspring.profiles.active=peer1 registry-0.0.1-SNAPSHOT.jar
java -jar -Dspring.profiles.active=peer2 registry-0.0.1-SNAPSHOT.jar
java -jar -Dspring.profiles.active=peer3 registry-0.0.1-SNAPSHOT.jar

В процессе запуска может быть напечатан журнал ошибок.Это ошибка, вызванная невозможностью подключения к другим реестрам во время запуска, поскольку реестр еще не запущен.Эта ошибка исчезнет после полного запуска трех служб.

После того, как сервис запущен, вы можете открыть его в браузере, поскольку наш сервис состоит из трех узлов, вы можете открыть любой из них:http://peer1:8761/

существуетDS Replicasтак же какInstances currently registered with Eureka, вы можете увидеть статус узлов, которые мы запустили.

На данный момент мы успешно создали реестр с тремя узлами.

Механизм самозащиты Эврики

Когда мы выключаем экземпляр, Eureka Server может отображать следующие подсказки:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

Это потому, что Эврика включает механизм самозащиты. По умолчанию, если Eureka Server не получает пульс для экземпляра в течение определенного периода времени, он удалит экземпляр. Но может быть и такая ситуация: при сбое сетевого раздела служба и Eureka Server не могут нормально общаться, но сама служба в норме, и удалять службу в это время не следует, поэтому Eureka вводит механизм самозащиты. Когда Eureka вводит этот механизм, она больше не будет удалять какие-либо службы, даже если они недоступны.

вы можете просмотретьЭта проблематак же какофициальная документацияЧтобы узнать больше о механизме самозащиты, я не буду вдаваться в подробности.

Это введение в создание среды Eureka, В следующей статье я представлюSpring Cloud Config.