Подключение к управляемому серверу Eureka для Spring в приложениях контейнеров Azure
Eureka Server for Spring — это реестр служб, позволяющий микрослужбам регистрировать себя и обнаруживать другие службы. Eureka Server for Spring доступен в качестве компонента "Приложения контейнеров Azure". Вы можете привязать приложение контейнера к Eureka Server for Spring для автоматической регистрации на сервере Eureka.
В этом руководстве описано следующее:
- Создайте компонент Eureka Server для Spring Java.
- Привязать приложение контейнера к компоненту Eureka Server для 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 Ги. |
Цены | Выставление счетов 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"
«Переменная» Description 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 для 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.
Привязка также внедряет следующие свойства:
"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 Server для Spring Java
Чтобы удалить привязку из приложения-контейнера, используйте --unbind
этот параметр.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Просмотр приложения с помощью панели мониторинга
Внимание
Чтобы просмотреть панель мониторинга, необходимо иметь по крайней мере Microsoft.App/managedEnvironments/write
роль, назначенную учетной записи в ресурсе управляемой среды. Вы можете явно назначить Owner
Contributor
или роль в ресурсе. Вы также можете выполнить действия, чтобы создать определение пользовательской роли и назначить его учетной записи.
Примечание.
Панель мониторинга недоступна в Azure China 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
идентификатором подписки.Назначьте настраиваемую роль учетной записи в ресурсе управляемой среды.
Получите идентификатор ресурса управляемой среды:
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 для Spring и компоненты Admin for 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
конфигурации:
Имя | Описание: | Default value |
---|---|---|
eureka.server.enable-self-preservation |
Если этот параметр включен, сервер отслеживает количество обновлений, которые он должен получать от сервера. В любой момент, когда число обновлений снижается ниже порогового процента, как определено eureka.server.renewal-percent-threshold . Значение по умолчанию задано true на исходном сервере Eureka, но в компоненте Java для сервера Eureka значение по умолчанию имеет false значение. См . ограничения компонента Eureka Server для 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 |
Список сертифицированных клиентов. Это в дополнение к стандартным клиентам Java eureka. | 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
для вызова вызываемого приложения с помощью его имени приложения, вызываемого абонента.@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 China 21Vianet.
Следующие шаги
Связанный контент
Интеграция управляемого администратора для Spring с Eureka Server для Spring