Клиент Eureka работает и общается друг с другом даже после того, как я остановил зарегистрированный сервер. Как?

Я создал сервер Eureka и зарегистрировал на нем двух клиентов. Клиенты спокойно общаются друг с другом.

После этого я остановил сервер Eureka, но оба моих клиента все равно без проблем общаются друг с другом. Как это возможно? Я использую следующий код в своем первом клиенте для связи со вторым клиентом.

ServiceInstance instance = loadbalancerclient.choose(secondService);
URI uri=URI.create(String.format("http://%s:%s"+"/test",instance.getHost(),instance.getPort()));
ResponseEntity<String> result = restTemplate.getForEntity(uri.toString(),String.class);

Поскольку вместо жесткого кодирования любого URL-адреса я использую зарегистрированное имя 2-го клиента на сервере Eureka, я не ожидал, что он будет работать, когда сервер не работает. Может ли кто-нибудь объяснить мне, почему это происходит?


person Vinay    schedule 29.08.2018    source источник


Ответы (2)


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

Если Eureka не работает, клиент использует кэшированную копию адреса удаленной службы, что хорошо для устойчивости и временных сетевых сбоев.

Если немного подумать, почему бы это не сработать? Если Eureka не работает, это не означает, что удаленная служба также не работает или ее физический адрес изменился.

person Constantin Galbenu    schedule 29.08.2018

Из документации:

Выбрать реестр

Клиенты Eureka извлекают информацию из реестра с сервера и кэшируют ее локально. После этого клиенты используют эту информацию для поиска других сервисов. Эта информация периодически обновляется (каждые 30 секунд) путем получения дельта-обновлений между последним циклом выборки и текущим. Дельта-информация хранится на сервере дольше (около 3 минут), поэтому дельта-выборки могут снова возвращать те же экземпляры. Клиент Eureka автоматически обрабатывает повторяющуюся информацию.

После получения дельт клиент Eureka согласовывает информацию с сервером, сравнивая количество экземпляров, возвращенных сервером, и, если информация по какой-либо причине не совпадает, вся информация реестра извлекается снова. Сервер Eureka кэширует сжатую полезную нагрузку дельт, всего реестра, а также каждого приложения, а также их несжатую информацию. Полезная нагрузка также поддерживает оба формата JSON/XML. Клиент Eureka получает информацию в сжатом формате JSON с помощью клиента jersey apache.

person Strelok    schedule 29.08.2018