Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Eureka Server for Spring — это реестр служб, позволяющий микрослужбам регистрировать себя и обнаруживать другие службы. Eureka Server for Spring доступен как компонент Контейнеры приложений Azure. Вы можете привязать приложение контейнера к Eureka Server for Spring для автоматической регистрации на сервере Eureka.
В этом руководстве описано следующее:
- Создайте компонент Eureka Server для Spring Java.
- Привязать приложение контейнера к компоненту Eureka Server for Spring Java.
Внимание
В этом руководстве используются службы, которые могут повлиять на счет Azure. Если вы решите продолжить работу, убедитесь, что вы удалили ресурсы, описанные в этой статье, чтобы избежать непредвиденных выставления счетов.
Требуемые условия
- Учетная запись Azure с активной подпиской. Если у вас еще нет, его можно создать бесплатно.
- Azure CLI.
Рекомендации
При запуске Eureka Server for Spring in Container Apps помните о следующих сведениях:
| Товар | Пояснение |
|---|---|
| Область | Компонент Eureka server for Spring выполняется в той же среде, что и подключенное приложение контейнера. |
| Масштабирование | Компонент Eureka Server для Spring не может масштабироваться. Свойства масштабирования minReplicas и maxReplicas оба имеют значение 1. Чтобы обеспечить высокий уровень доступности, см. статью "Создание высокодоступной службы Eureka" в контейнерных приложениях. |
| Ресурсы | Распределение ресурсов контейнера для Eureka Server для Spring исправлено. Число ядер ЦП равно 0.5, а размер памяти — 1 Gi. |
| Цены | Биллинг Eureka Server для Spring подпадает под тарификацию на основе потребления. Ресурсы, потребляемые управляемыми компонентами Java, оплачиваются по тарифам для активного/бездействующего режима. Вы можете удалить компоненты, которые больше не используются для остановки выставления счетов. |
| Привязка | Приложения-контейнеры подключаются к компоненту Eureka server for Spring через привязку. Привязки внедряют конфигурации в переменные среды приложения-контейнера. После установки привязки приложение-контейнер может считывать значения конфигурации из переменных среды и подключаться к компоненту Eureka Server for Spring. |
Настройка
Прежде чем приступить к работе с компонентом Eureka Server for Spring, сначала необходимо создать необходимые ресурсы.
Выполните следующие команды, чтобы создать группу ресурсов в среде приложения контейнера.
Создайте переменные для поддержки конфигурации приложения. Эти значения предоставляются для вас в целях этого урока.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_NAME=eureka export APP_NAME=my-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"«Переменная» Описание LOCATIONМестоположение региона Azure, где вы создаете приложение-контейнер и компонент Java. ENVIRONMENTИмя среды для контейнерного приложения вашего демо-приложения. RESOURCE_GROUPИмя группы ресурсов Azure для демонстрационного приложения. EUREKA_COMPONENT_NAMEИмя компонента Java, созданного для приложения контейнера. В этом случае создается компонент Eureka Server для Spring Java. IMAGEОбраз контейнера, используемый в вашем контейнерном приложении. Войдите в Azure с помощью Azure CLI.
az loginСоздать группу ресурсов.
az group create --name $RESOURCE_GROUP --location $LOCATIONСоздайте среду приложения-контейнера.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Создание компонента Eureka Server для Spring Java
Теперь, когда у вас есть существующая среда, вы можете создать приложение-контейнер и привязать его к экземпляру компонента Java Eureka Server for Spring.
Создайте компонент Eureka Server для Spring Java.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAMEНеобязательно. Обновите конфигурацию компонента Eureka Server для Spring Java.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
Привязка приложения контейнера к компоненту Eureka Server for Spring Java
Создайте приложение-контейнер и привязите его к компоненту Eureka Server for Spring.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --bind $EUREKA_COMPONENT_NAME \ --query properties.configuration.ingress.fqdnСкопируйте URL-адрес приложения в текстовый редактор, чтобы его можно было использовать в предстоящем шаге.
Вернитесь к приложению-контейнеру на портале. Скопируйте URL-адрес приложения в текстовый редактор, чтобы его можно было использовать в предстоящем шаге.
Перейдите к маршруту /allRegistrationStatus , чтобы просмотреть все приложения, зарегистрированные в компоненте Eureka Server для Spring.
Привязка внедряет несколько конфигураций в приложение в качестве переменных окружения, прежде всего свойство eureka.client.service-url.defaultZone. Это свойство указывает внутреннюю конечную точку компонента Java Eureka Server.
Привязка также внедряет следующие свойства:
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
Свойство eureka.client.register-with-eureka устанавливается в значение true для принудительного выполнения регистрации на сервере Eureka. Эта регистрация перезаписывает локальный параметр в application.properties, полученный с сервера конфигурации и так далее. Если вы хотите задать его false, можно перезаписать значение, установив переменную окружения в приложении контейнера.
Свойство eureka.instance.prefer-ip-address задано true из-за конкретного правила разрешения системы доменных имен в среде приложения контейнера. Не изменяйте это значение, чтобы не прерывать привязку.
Необязательно: Отвязать ваше приложение-контейнер от сервера Eureka для компонента Spring Java
Чтобы удалить привязку из приложения-контейнера, используйте параметр --unbind.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Просмотр приложения с помощью панели мониторинга
Внимание
Чтобы просмотреть панель мониторинга, необходимо иметь по крайней мере роль Майкрософт.App/managedEnvironments/write, назначенную учетной записи в ресурсе управляемой среды. Вы можете явно назначить роль Owner или Contributor на ресурсе. Вы также можете выполнить действия, чтобы создать определение роли пользователя и назначить её вашей учетной записи.
Примечание.
Панель мониторинга недоступна в Azure под управлением 21Vianet.
Создайте определение настраиваемой роли.
az role definition create --role-definition '{ "Name": "<YOUR_ROLE_NAME>", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'Убедитесь, что заменили заполнитель
<SUBSCRIPTION_ID>в значенииAssignableScopesна ID вашей подписки.Назначьте настраиваемую роль вашему аккаунту на управляемом ресурсе среды.
Получите идентификатор ресурса управляемой среды:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)Назначьте роль для вашей учетной записи.
Перед выполнением этой команды замените заполнители в скобках
<>на идентификатор пользователя, идентификатор субъекта-службы и имя роли.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_IDПримечание.
Значение
<USER_OR_SERVICE_PRINCIPAL_ID>обычно должно быть учетной записью, используемой для доступа к порталу Azure. Значением<ROLE_NAME>является имя, назначенное на шаге 1.Получите URL-адрес панели мониторинга Eureka Server для Spring.
az containerapp env java-component eureka-server-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME \ --query properties.ingress.fqdn \ --output tsvЭта команда возвращает URL-адрес, который можно использовать для доступа к панели мониторинга Eureka Server для Spring. С помощью панели мониторинга вы также можете увидеть приложение контейнера, как показано на следующем снимке экрана.
Необязательно. Интеграция компонентов Eureka Server for Spring и Admin for Spring Java
Если вы хотите интегрировать компоненты Eureka Server для Spring и Admin для компонентов Spring Java, см. раздел Интеграция управляемого администратора для Spring с Eureka Server для Spring.
Очистка ресурсов
Ресурсы, созданные в этом руководстве, влияют на ваш счёт в Azure. Если вы не собираетесь использовать эти службы в долгосрочной перспективе, выполните следующую команду, чтобы удалить все, что вы создали в этом руководстве.
az group delete --resource-group $RESOURCE_GROUP
Список разрешенных конфигураций для сервера Eureka для Spring
В следующих разделах описаны поддерживаемые конфигурации. Дополнительные сведения см. в разделе Spring Cloud Eureka Server.
Примечание.
Вы можете отправлять запросы в службу поддержки для новых функций.
Варианты конфигурации
Команда az containerapp update использует --configuration параметр для управления настройкой сервера Eureka для Spring. Вы можете одновременно использовать несколько параметров, если они разделены пробелом. Дополнительные сведения см. в разделе Spring Cloud Eureka Server.
Следующие параметры конфигурации доступны в свойстве eureka.server конфигурации:
| Имя. | Описание | Значение по умолчанию |
|---|---|---|
eureka.server.enable-self-preservation |
Если этот параметр включен, сервер отслеживает количество обновлений, которые он должен получать от сервера. Если число обновлений снижается ниже порогового процента, как определено eureka.server.renewal-percent-threshold. Значение по умолчанию имеет значение true на исходном сервере Eureka, но в компоненте Java Сервера Eureka значение по умолчанию имеет значение false. См. раздел Ограничения Eureka Server for Spring Java компонента. |
false |
eureka.server.renewal-percent-threshold |
Минимальный процент обновлений, ожидаемых от клиентов за указанный период eureka.server.renewal-threshold-update-interval-ms. Если обновления опускаются ниже порогового значения, истечения отключаются, если eureka.server.enable-self-preservation включено. |
0.85 |
eureka.server.renewal-threshold-update-interval-ms |
Интервал, с которым необходимо обновить порог, указанный в eureka.server.renewal-percent-threshold. |
0 |
eureka.server.expected-client-renewal-interval-seconds |
Интервал, с которыми клиенты должны отправлять пульс. Значение по умолчанию — 30 секунд. Если клиенты отправляют пульса с другой частотой, скажем, каждые 15 секунд, этот параметр должен быть настроен соответствующим образом, в противном случае самосохранение не работает должным образом. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
Возвращает время хранения данных реестра в кэше, если его не аннулируют события изменений. | 180 |
eureka.server.response-cache-update-interval-ms |
Возвращает интервал времени, в течение которого необходимо обновлять кэш полезной нагрузки клиента. | 0 |
eureka.server.use-read-only-response-cache |
В настоящее время com.netflix.eureka.registry.ResponseCache использует для ответов двухуровневую стратегию кэширования.
readWrite Кэш с политикой истечения срока действия и readonly кэш, который кэширует без истечения срока действия. |
true |
eureka.server.disable-delta |
Проверяет, может ли разностная информация быть предоставлена клиенту. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Установите время, на которое необходимо кэшировать информацию о дельтах для клиентов, чтобы они могли получать значения без пропуска. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
Получите интервал времени, по истечении которого задача очистки должна проснуться и проверить наличие устаревшей информации. | 0 |
eureka.server.eviction-interval-timer-in-ms |
Получите интервал времени, с которым задача, срок действия которой истекает, должна проснуться и запуститься. | 60000 |
eureka.server.sync-when-timestamp-differs |
Проверяет, следует ли синхронизировать экземпляры, если метка времени отличается. | true |
eureka.server.rate-limiter-enabled |
Указывает, следует ли включить или отключить ограничение скорости. | false |
eureka.server.rate-limiter-burst-size |
Ограничитель скорости, алгоритм ведра с токенами. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Ограничитель скорости, алгоритм ведра с токенами. Указывает среднюю частоту принудительного запроса. | 500 |
eureka.server.rate-limiter-privileged-clients |
Список сертифицированных клиентов, кроме стандартных клиентов eureka Java. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Укажите, применяется ли стандартное ограничение скорости к клиентам. Если задано значение false, только нестандартные клиенты ограничены скоростью. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Ограничитель скорости, алгоритм ведра с токенами. Указывает среднюю частоту принудительного запроса. | 100 |
Распространенные способы конфигурирования
- Связанные с ведением журнала конфигурации:
logging.level.*logging.group.*- Любые другие конфигурации в пространстве имен
logging.*должны быть запрещены - например, использованиеlogging.fileдля записи файлов журнала должно быть запрещено.
Взаимодействие между приложениями
В этом примере показано, как писать Java код для вызова между приложениями, зарегистрированными в компоненте Eureka Server для Spring. Когда приложения-контейнеры привязаны к Eureka, они взаимодействуют друг с другом через сервер Eureka.
В этом примере создаются два приложения: вызывающее и принимающее. Оба приложения взаимодействуют друг с другом с помощью компонента Eureka Server для Spring. Вызываемое приложение предоставляет конечную точку, вызываемую вызывающим приложением.
Создайте вызываемое приложение. Включите клиент Eureka в приложении Spring Boot, добавив заметку
@EnableDiscoveryClientв основной класс.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }Создайте конечную точку в приложении-получателе, на которую будет осуществляться вызов из приложения-инициатора.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }Задайте имя вызываемого приложения в файле конфигурации приложения, например в application.yml.
spring.application.name=calleeСоздайте вызывающее приложение.
Добавьте заметку
@EnableDiscoveryClient, чтобы включить функциональность клиента Eureka. Кроме того, создайтеWebClient.Builderкомпонент с@LoadBalancedаннотацией для выполнения вызовов с распределением нагрузки на другие сервисы.@SpringBootApplication @EnableDiscoveryClient public class CallerApplication { public static void main(String[] args) { SpringApplication.run(CallerApplication.class, args); } @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } }Создайте контроллер в вызывающем приложении, который использует
WebClient.Builderдля вызова целевого приложения с использованием имени этого приложения - callee.@RestController public class CallerController { @Autowired private WebClient.Builder webClientBuilder; @GetMapping("/call-callee") public Mono<String> callCallee() { return webClientBuilder.build() .get() .uri("http://callee/call") .retrieve() .bodyToMono(String.class); } }
Теперь у вас есть вызывающее и вызываемое приложение, которое взаимодействует друг с другом с помощью Eureka Server для компонентов Spring Java. Убедитесь, что оба приложения запущены и привязаны к серверу Eureka перед тестированием /call-callee конечной точки в вызывающем приложении.
Ограничения
- Компонент Java Eureka Server поставляется с конфигурацией по умолчанию,
eureka.server.enable-self-preservation, для параметраfalse. Эта конфигурация по умолчанию помогает избежать времени, когда экземпляры не удаляются после включения самосохранения. Если экземпляры удаляются слишком рано, некоторые запросы могут быть направлены на несуществующие экземпляры. Если вы хотите изменить этот параметр наtrue, его можно перезаписать, задав собственные конфигурации в компоненте Java. - Панель мониторинга Eureka недоступна в Azure под управлением 21Vianet.
Следующие шаги
Связанный контент
Интеграция управляемой админ-консоли для Spring с сервером Eureka для Spring