Tutorial: Conexión a un servidor Eureka administrado para Spring en Azure Container Apps
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.
- Azure CLI.
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. |
Enlace | 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. |
Configurar
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 admitir la configuración de la 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 LOCATION
Ubicación de la región de Azure donde se crea la aplicación de contenedor y el componente de Java. ENVIRONMENT
Nombre del entorno de la aplicación contenedora para la aplicación de demostración. RESOURCE_GROUP
Nombre del grupo de recursos de Azure para la aplicación de demostración. EUREKA_COMPONENT_NAME
Nombre del componente de Java creado para la aplicación contenedora. En este caso, creará un componente Eureka Server para Spring Java. IMAGE
Imagen de contenedor usada en la aplicación contenedora. Inicio de sesión en Azure con la CLI de Azure.
az login
Cree un grupo de recursos.
az group create --name $RESOURCE_GROUP --location $LOCATION
Cree el entorno de Container Apps.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Cree el componente Eureka Server for 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 Eureka Server for Spring Java.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME
Opcional: 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.fqdn
Copie 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 contenedora 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.
El enlace también inserta 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.
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 deAssignableScopes
por el identificador 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 el marcador de posición, como se indica en los corchetes de
<>
, por el identificador de usuario o la entidad de servicio y el nombre del rol.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_ID
Nota:
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 tsv
Este comando devuelve la dirección URL que puede usar para acceder al panel de Eureka Server para Spring. Con el panel, también puede ver la aplicación contenedora, 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 incidencias de soporte técnico para nuevas solicitudes de características.
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 | Default value |
---|---|---|
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. El valor predeterminado es 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 memoria caché readWrite con una directiva de expiración y una caché de readonly que se almacena en caché sin expiración. |
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 |
Obtenga la hora para la que se debe almacenar en caché la información diferencial para que los clientes recuperen el valor sin que falte. | 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 la tarea que expira las instancias debe reactivarse y ejecutarse. | 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 aplicada. | 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 los clientes estándar limitan la velocidad. 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.file
debe 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
@EnableDiscoveryClient
a la clase principal.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
Cree un punto de conexión en la aplicación de llamada a la que llama la aplicación de autor de llamada.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
Establezca el nombre de la aplicación de llamada en el archivo de configuración de la aplicación; por ejemplo, en application.yml.
spring.application.name=callee
Creación de la aplicación del autor de la llamada.
Agregue la anotación
@EnableDiscoveryClient
para habilitar la funcionalidad del cliente Eureka. Además, cree unWebClient.Builder
bean con la anotación@LoadBalanced
para realizar llamadas con equilibrio 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 de llamador que use el
WebClient.Builder
para llamar a la aplicación de llamada mediante su nombre de aplicación, destinatario.@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 llamador y destinatario que se comunica entre sí mediante el servidor Eureka para los 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 en false
. 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 a true
, puede sobrescribirla estableciendo sus propias configuraciones en el componente de Java.
Pasos siguientes
Contenido relacionado
Integración del Administrador gestionado para Spring con Eureka Server para Spring