Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Eureka Server para Spring es un registro de servicios que permite a los microservicios registrarse y detectar otros servicios. Eureka Server for Spring está disponible como componente de Azure Container Apps. Puede enlazar la aplicación contenedora a Eureka Server for Spring para el registro automático con el servidor Eureka.
En este tutorial, aprenderá a:
- Creación de un componente Eureka Server para Spring Java.
- Enlace de la aplicación contenedora al componente Eureka Server for Spring Java.
Importante
En este tutorial se usan servicios que pueden afectar a la factura de Azure. Si decide seguir, asegúrese de eliminar los recursos destacados en este artículo para evitar una facturación inesperada.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Si aún no tiene ninguno, puede crear uno gratis.
- CLI de Azure.
Consideraciones
Al ejecutar Eureka Server para Spring en Container Apps, tenga en cuenta los detalles siguientes:
| Elemento | Explicación |
|---|---|
| Ámbito | El componente Eureka Server for Spring se ejecuta en el mismo entorno que la aplicación contenedora conectada. |
| Ampliación | El componente de servidor Eureka para Spring no se puede escalar. Las propiedades de escalado minReplicas y maxReplicas se establecen en 1. Para lograr una alta disponibilidad, consulte Creación de un servicio Eureka de alta disponibilidad en Container Apps. |
| Recursos | Se ha corregido la asignación de recursos de contenedor para Eureka Server for Spring. El número de núcleos de CPU es 0,5 y el tamaño de memoria es 1 Gi. |
| Precios | La facturación del servidor Eureka para Spring se encuentra bajo los precios basados en el consumo. Los recursos consumidos por los componentes de Java administrados se facturan a las tarifas activas o inactivas. Puede eliminar componentes que ya no estén en uso para detener la facturación. |
| Vinculación | Las aplicaciones de contenedor se conectan a un componente Eureka Server for Spring a través de un enlace. Los enlaces insertan configuraciones en variables de entorno de la aplicación contenedora. Una vez establecido un enlace, la aplicación contenedora puede leer los valores de configuración de las variables de entorno y conectarse al servidor Eureka para el componente Spring. |
Configuración
Antes de empezar a trabajar con el servidor Eureka para el componente Spring, primero debe crear los recursos necesarios.
Ejecute los siguientes comandos para crear el grupo de recursos en un entorno de Container Apps.
Cree variables para soportar la configuración de su aplicación. Estos valores se proporcionan para usted con fines de esta lección.
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"Variable Descripción LOCATIONUbicación de la región de Azure donde se crea la aplicación de contenedor y el componente de Java. ENVIRONMENTNombre del entorno de la aplicación contenedora para la aplicación de demostración. RESOURCE_GROUPNombre del grupo de recursos de Azure para la aplicación de demostración. EUREKA_COMPONENT_NAMENombre del componente de Java creado para la aplicación contenedora. En este caso, creará un componente Eureka Server para Spring Java. IMAGEImagen de contenedor utilizada en la aplicación de contenedor. Inicio de sesión en Azure con la CLI de Azure.
az loginCree un grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATIONCree su entorno de Container Apps.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Cree el componente Eureka Server para Spring Java
Ahora que tiene un entorno existente, puede crear la aplicación de contenedor y enlazarla a una instancia de componente de Java de Eureka Server for Spring.
Cree el componente servidor Eureka para Java Spring.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAMEOpcional: Actualice la configuración del componente Eureka Server for 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
Enlace de la aplicación contenedora al componente Eureka Server for Spring Java
Cree la aplicación contenedora y enlace con el servidor Eureka para el componente 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.fqdnCopie la dirección URL de la aplicación en un editor de texto para que pueda usarla en un próximo paso.
Vuelva a la aplicación de contenedores en el portal. Copie la dirección URL de la aplicación en un editor de texto para que pueda usarla en un próximo paso.
Vaya a la ruta /allRegistrationStatus para ver todas las aplicaciones registradas con el componente Eureka Server for Spring.
El enlace inserta varias configuraciones en la aplicación como variables de entorno, principalmente la propiedad eureka.client.service-url.defaultZone. Esta propiedad indica el punto de conexión interno del componente Java del servidor Eureka.
La vinculación también inyecta las siguientes propiedades:
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
La propiedad eureka.client.register-with-eureka se establece en true para aplicar el registro con el servidor Eureka. Este registro sobrescribe la configuración local en application.properties, desde el servidor de configuración, etc. Si quiere establecerlo en false, puede sobrescribirlo estableciendo una variable de entorno en la aplicación contenedora.
La propiedad eureka.instance.prefer-ip-address se establece en true debido a la regla de resolución del sistema de nombres de dominio específica en el entorno de la aplicación contenedora. No modifique este valor para no interrumpir el enlace.
Opcional: Desenlace la aplicación contenedora del componente Eureka Server para Spring Java
Para quitar un enlace de una aplicación de contenedor, recurra a la opción --unbind.
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
Visualización de la aplicación a través de un panel
Importante
Para ver el panel, debe tener al menos el rol de Microsoft.App/managedEnvironments/write asignado a su cuenta en el recurso de entorno administrado. Puede asignar explícitamente el rol Owner o Contributor en el recurso. También puede seguir los pasos para crear una definición de roles personalizada y asignarla a su cuenta.
Nota:
El panel no está disponible en Azure China 21Vianet.
Creación de una definición de rol personalizado.
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>"] }'Asegúrese de reemplazar el marcador de posición
<SUBSCRIPTION_ID>en el valor deAssignableScopespor su ID de suscripción.Asigne el rol personalizado a su cuenta en el recurso de entorno administrado.
Obtenga el identificador de recurso del entorno administrado:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)Asigne el rol a su cuenta.
Antes de ejecutar este comando, reemplace los marcadores de posición, indicados por los corchetes
<>, con su identificador de usuario o su ID de entidad de servicio y el nombre del rol.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_IDNota:
El valor
<USER_OR_SERVICE_PRINCIPAL_ID>normalmente debe ser la identidad que se usa para acceder a Azure Portal. El valor<ROLE_NAME>es el nombre que asignó en el paso 1.Obtenga la dirección URL del panel de Eureka Server for 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 tsvEste comando devuelve la dirección URL que puede usar para acceder al panel de Eureka Server para Spring. Con el panel de control, también puede ver su aplicación de contenedor, como se muestra en la captura de pantalla siguiente.
Opcional: Integrar el servidor Eureka para los componentes de Spring y Admin para Spring Java
Si desea integrar el servidor Eureka para Spring y los componentes de Admin for Spring Java, consulte Integrar el administrador administrado para Spring con Eureka Server for Spring.
Limpieza de recursos
Los recursos creados en este tutorial tienen un efecto en la factura de Azure. Si no va a usar estos servicios a largo plazo, ejecute el siguiente comando para quitar todo lo creado en este tutorial.
az group delete --resource-group $RESOURCE_GROUP
Lista de configuración permitida para el servidor Eureka para Spring
En las secciones siguientes se describen las configuraciones admitidas. Para obtener más información, consulte Spring Cloud Eureka Server.
Nota:
Envíe tiquetes de soporte técnico para solicitudes nuevas de funciones.
Opciones de configuración
El comando az containerapp update usa el parámetro --configuration para controlar cómo se configura el servidor Eureka para Spring. Puede usar varios parámetros a la vez siempre que estén separados por un espacio. Para obtener más información, consulte Spring Cloud Eureka Server.
Las siguientes opciones de configuración están disponibles en la propiedad de configuración eureka.server:
| Nombre | Descripción | Valor predeterminado |
|---|---|---|
eureka.server.enable-self-preservation |
Cuando está habilitado, el servidor realiza un seguimiento del número de renovaciones que debe recibir del servidor. En cualquier momento, el número de renovaciones cae por debajo del porcentaje de umbral definido por eureka.server.renewal-percent-threshold. El valor predeterminado se establece en true en el servidor Eureka original, pero en el componente de Java del servidor Eureka, el valor predeterminado se establece en false. Consulte Limitaciones del componente Eureka Server for Spring Java. |
false |
eureka.server.renewal-percent-threshold |
Porcentaje mínimo de renovaciones esperadas de los clientes en el período especificado por eureka.server.renewal-threshold-update-interval-ms. Si las renovaciones caen por debajo del umbral, las expiraciones se deshabilitan si eureka.server.enable-self-preservation está habilitada. |
0.85 |
eureka.server.renewal-threshold-update-interval-ms |
Intervalo con el que debe actualizarse el umbral, tal como se especifica en eureka.server.renewal-percent-threshold. |
0 |
eureka.server.expected-client-renewal-interval-seconds |
Intervalo con el que se espera que los clientes envíen sus latidos. Se establece predeterminadamente en 30 segundos. Si los clientes envían latidos con una frecuencia diferente, por ejemplo, cada 15 segundos, este parámetro se debe ajustar en consecuencia; de lo contrario, la autoconservación no funcionará según lo previsto. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
Obtiene el tiempo durante el cual la carga útil del registro debe mantenerse en la caché si no es invalidada por eventos de cambio. | 180 |
eureka.server.response-cache-update-interval-ms |
Obtiene el intervalo de tiempo con el que se debe actualizar la memoria caché de carga del cliente. | 0 |
eureka.server.use-read-only-response-cache |
Actualmente, com.netflix.eureka.registry.ResponseCache usa una estrategia de almacenamiento en caché de dos niveles para las respuestas. Una caché readWrite con una política de expiración y una readonly que almacena sin caducidad. |
true |
eureka.server.disable-delta |
Comprueba si la información diferencial se puede servir al cliente o no. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Determina el tiempo durante el cual la información diferencial debe almacenarse en caché para que los clientes puedan recuperarla sin perderla. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
Obtenga el intervalo de tiempo con el que la tarea de limpieza debe reactivarse y comprobar si hay información diferencial expirada. | 0 |
eureka.server.eviction-interval-timer-in-ms |
Obtenga el intervalo de tiempo con el que debe reactivarse y ejecutarse la tarea encargada de la expiración de instancias. | 60000 |
eureka.server.sync-when-timestamp-differs |
Comprueba si se van a sincronizar instancias cuando difiere la marca de tiempo. | true |
eureka.server.rate-limiter-enabled |
Indica si el limitador de velocidad debe estar habilitado o deshabilitado. | false |
eureka.server.rate-limiter-burst-size |
Limitador de velocidad, propiedad del algoritmo de cubo de tokens. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Limitador de velocidad, propiedad del algoritmo de cubo de tokens. Especifica la tasa media de solicitud impuesta. | 500 |
eureka.server.rate-limiter-privileged-clients |
Lista de clientes certificados. Esto se suma a los clientes Java estándar de eureka. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Indica si se aplica un límite de velocidad a los clientes estándar. Si se establece en false, solo los clientes no estándar tienen una tasa limitada. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Limitador de velocidad, propiedad del algoritmo de cubo de tokens. Especifica la tasa media de solicitud aplicada. | 100 |
Opciones de configuración comunes
- Registro de configuraciones relacionadas:
logging.level.*logging.group.*- Se debe prohibir cualquier otra configuración en el espacio de nombres
logging.*, por ejemplo, escribir archivos de registro mediantelogging.filedebe estar prohibido.
Llamada entre aplicaciones
En este ejemplo se muestra cómo escribir código Java para llamar entre aplicaciones registradas con el componente Eureka Server for Spring. Cuando las aplicaciones de contenedor están enlazadas con Eureka, se comunican entre sí a través del servidor Eureka.
En el ejemplo se crean dos aplicaciones, un llamador y un destinatario. Ambas aplicaciones se comunican entre sí mediante el componente Eureka Server for Spring. La aplicación de destinatario expone un punto de conexión al que llama la aplicación de autor de llamada.
Creación de la aplicación de destinatario. Habilite el cliente Eureka en la aplicación Spring Boot agregando la anotación
@EnableDiscoveryClienta la clase principal.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }Cree un endpoint en la aplicación de receptor al que llama la aplicación de llamada.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }Establezca el nombre de la aplicación llamada en el archivo de configuración de la aplicación, por ejemplo, en application.yml.
spring.application.name=calleeCrear la aplicación de llamada.
Agregue la anotación
@EnableDiscoveryClientpara habilitar la funcionalidad del cliente Eureka. Además, cree un beanWebClient.Buildercon la anotación@LoadBalancedpara realizar llamadas con balanceo de carga a otros servicios.@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(); } }Cree un controlador en la aplicación llamante que utilice el
WebClient.Builderpara llamar a la aplicación llamada mediante su nombre de aplicación, llamada.@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); } }
Ahora tiene una aplicación de cliente y servidor que se comunican entre sí mediante Eureka Server para componentes de Spring Java. Asegúrese de que ambas aplicaciones se ejecutan y se enlazan con el servidor Eureka antes de probar el punto de conexión de /call-callee en la aplicación del autor de llamada.
Limitaciones
- El componente de Java del servidor Eureka incluye una configuración predeterminada,
eureka.server.enable-self-preservation, establecida enfalse. Esta configuración predeterminada ayuda a evitar tiempos en los que las instancias no se eliminan después de habilitar la autoconservación. Si las instancias se eliminan demasiado pronto, es posible que algunas solicitudes se dirijan a instancias inexistentes. Si desea cambiar esta configuración atrue, puede sobrescribirla estableciendo sus propias configuraciones en el componente de Java. - El panel de Eureka no está disponible en Azure China 21Vianet.
Pasos siguientes
Contenido relacionado
Integración del Administrador gestionado para Spring con Eureka Server para Spring