Compartir a través de


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

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.

  1. 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.
  2. Inicio de sesión en Azure con la CLI de Azure.

    az login
    
  3. Cree un grupo de recursos.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 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.

  1. 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
    
  2. 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

  1. 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
    
  2. 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.

  1. 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 de AssignableScopes por el identificador de suscripción.

  2. 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)
    
  3. 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.

  4. 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.

    Recorte de pantalla del panel de Eureka Server for Spring.

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 mediante logging.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.

  1. 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);
      }
    }
    
  2. 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!";
        }
    }
    
  3. 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
    
  4. 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 un WebClient.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();
      }
    }
    
  5. 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

Integración del Administrador gestionado para Spring con Eureka Server para Spring