Partager via


Tutoriel : se connecter à une instance Eureka Server managée pour Spring dans Azure Container Apps

Eureka Server pour Spring est un registre de services qui permet aux microservices de s’inscrire eux-mêmes et de découvrir d’autres services. Serveur Eureka pour Spring est disponible en tant que composant Azure Container Apps. Vous pouvez lier votre application conteneur au Serveur Eureka pour Spring pour l’inscrire automatiquement au serveur Eureka.

Dans ce tutoriel, vous allez apprendre à :

  • Créer un composant Java Serveur Eureka pour Spring.
  • Lier votre application conteneur au composant Java Serveur Eureka pour Spring.

Important

Ce tutoriel utilise des services qui peuvent affecter votre facture Azure. Si vous décidez de suivre les étapes, assurez-vous de supprimer les ressources présentées dans cet article pour éviter toute facturation imprévue.

Prérequis

À propos de l’installation

Lorsque vous exécutez Serveur Eureka pour Spring dans Container Apps, tenez compte des détails suivants :

Article Explication
Étendue Le composant Java Eureka Server pour Spring s’exécute dans le même environnement que l’application conteneur connectée.
Mise à l'échelle Le composant Serveur Eureka pour Spring ne peut pas être mis à l’échelle. Les propriétés de mise à l’échelle minReplicas et maxReplicas sont toutes deux définies sur 1. Pour obtenir une haute disponibilité, consultez Créer un service Eureka hautement disponible dans Container Apps.
Ressources L’allocation de ressources de conteneur pour Eureka Server pour Spring est fixe. Le nombre de cœurs de processeur est 0,5 et la taille de la mémoire est 1 Gi.
Tarification La facturation Eureka Server pour Spring est soumise à des tarifs basés sur la consommation. Les ressources consommées par les composants Java managés sont facturées aux taux actif/inactif. Vous pouvez supprimer les composants qui ne sont plus utilisés pour arrêter la facturation.
Binding Les applications conteneur se connectent à un composant Eureka Server pour Spring avec une liaison. La liaison injecte les configurations dans les variables d’environnement de l’application conteneur. Une fois qu’une liaison est établie, l’application conteneur peut lire les valeurs de configuration des variables d’environnement et se connecter au composant Serveur Eureka pour Spring.

Programme d’installation

Avant de commencer à utiliser le composant Serveur Eureka pour Spring, vous devez d’abord créer les ressources nécessaires.

Exécutez les commandes suivantes pour créer votre groupe de ressources dans un environnement d’application conteneur.

  1. Créez des variables pour prendre en charge la configuration de votre application. Ces valeurs sont fournies dans le cadre de cette leçon.

    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 Description
    LOCATION Emplacement de la région Azure où vous créez votre application conteneur et votre composant Java.
    ENVIRONMENT Le nom de l’environnement d’application conteneur pour votre application de démonstration.
    RESOURCE_GROUP Nom du groupe de ressources Azure de votre application de démonstration.
    EUREKA_COMPONENT_NAME Nom du composant Java créé pour votre application conteneur. Dans ce cas, vous créez un composant Java Eureka Server pour Spring.
    IMAGE Image conteneur utilisée dans votre application conteneur.
  2. Se connecter à Azure avec Azure CLI.

    az login
    
  3. Créez un groupe de ressources.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Créez votre environnement d’application conteneur.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

Créer le composant Java Serveur Eureka pour Spring

Maintenant que vous avez un environnement existant, vous pouvez créer votre application conteneur et la lier à une instance de composant Java Eureka Server pour Spring.

  1. Créez le composant Java Eureka Server pour Spring.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. Facultatif : mettez à jour la configuration du composant Java Serveur Eureka pour Spring.

    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
    

Lier votre application conteneur au composant Java Serveur Eureka pour Spring

  1. Créez l’application conteneur et liez-la au composant Serveur Eureka pour 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. Copiez l’URL de votre application dans un éditeur de texte afin de pouvoir l’utiliser dans une prochaine étape.

Revenez à l’application conteneur dans le portail. Copiez l’URL de votre application dans un éditeur de texte afin de pouvoir l’utiliser dans une prochaine étape.

Accédez à l’itinéraire /allRegistrationStatus pour voir toutes les applications inscrites au composant Serveur Eureka pour Spring.

La liaison injecte plusieurs configurations dans l’application sous forme de variables d’environnement, en particulier la propriété eureka.client.service-url.defaultZone. Cette propriété indique le point de terminaison interne du composant Java Eureka Server.

La liaison injecte aussi les propriétés suivantes :

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

La propriété eureka.client.register-with-eureka est définie sur true pour appliquer l’inscription au serveur Eureka. Cette inscription remplace le paramètre local dans application.properties dans le serveur de configuration, et ainsi de suite. Si vous voulez le définir sur false, vous pouvez le remplacer en définissant une variable d’environnement dans votre application conteneur.

La propriété eureka.instance.prefer-ip-address est définie sur true en raison de la règle de résolution spécifique du système de noms de domaine dans l’environnement d’application conteneur. Ne modifiez pas cette valeur pour ne pas rompre la liaison.

Facultatif : Dissocier votre application conteneur du composant Java Serveur Eureka pour Spring

Pour supprimer une liaison d’une application conteneur, utilisez l’option --unbind.

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Afficher l’application via un tableau de bord

Important

Pour afficher le tableau de bord, vous devez disposer au moins du rôle Microsoft.App/managedEnvironments/write, celui-ci devant être attribué à votre compte sur la ressource d’environnement managé. Vous pouvez attribuer explicitement le rôle Owner ou Contributor sur la ressource. Vous pouvez également suivre les étapes pour créer une définition de rôle personnalisé et l’attribuer à votre compte.

  1. Créez une définition de rôle personnalisé.

    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>"]
    }'
    

    N’oubliez pas de remplacer l’espace réservé <SUBSCRIPTION_ID> dans la valeur AssignableScopes par votre propre ID d’abonnement.

  2. Attribuez le rôle personnalisé à votre compte sur une ressource d’environnement managée.

    Obtenez l’ID de ressource de l’environnement managé :

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Attribuez le rôle à votre compte.

    Avant d’exécuter cette commande, remplacez les espaces réservés (indiqués par des crochets <>) par votre ID d’utilisateur ou de principal de service et le nom de votre rôle.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Remarque

    La valeur <USER_OR_SERVICE_PRINCIPAL_ID> doit généralement être l’identité que vous utilisez pour accéder au portail Azure. La valeur <ROLE_NAME> est le nom que vous avez attribué à l’étape 1.

  4. Obtenez l’URL du tableau de bord Serveur Eureka pour 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
    

    Cette commande retourne l’URL que vous pouvez utiliser pour accéder au tableau de bord Serveur Eureka pour Spring. Avec le tableau de bord, vous pouvez également afficher votre application conteneur, comme illustré dans la capture d’écran suivante.

    Capture d’écran montrant le tableau de bord Serveur Eureka pour Spring.

Facultatif : intégrer les composants Java Serveur Eureka pour Spring et Administration pour Spring

Si vous souhaitez intégrer les composants Java Serveur Eureka pour Spring et Administration pour Spring, consultez Intégrer l’Administration gérée pour Spring à Serveur Eureka pour Spring.

Nettoyer les ressources

Les ressources créées dans ce tutoriel ont un effet sur votre facture Azure. Si vous n’allez pas utiliser ces services à long terme, exécutez la commande suivante pour supprimer tout ce qui a été créé dans ce tutoriel.

az group delete --resource-group $RESOURCE_GROUP

Liste de configurations autorisées pour votre composant Eureka Server pour Spring

Les sections suivantes décrivent les configurations prises en charge. Pour plus d’informations, consultez Spring Cloud Eureka Server.

Remarque

Veuillez envoyer des tickets de support pour demander des nouvelles fonctionnalités.

Options de configuration

La commande az containerapp update utilise le paramètre --configuration pour contrôler la configuration du Eureka Server pour Spring. Vous pouvez utiliser plusieurs paramètres à la fois tant qu’ils sont séparés par un espace. Pour plus d’informations, consultez Spring Cloud Eureka Server.

Les paramètres de configuration suivants sont disponibles sur la propriété de configuration eureka.server :

Nom Description Valeur par défaut
eureka.server.enable-self-preservation Lorsqu’il est activé, le serveur effectue le suivi du nombre de renouvellements qu’il doit recevoir du serveur. À tout moment, le nombre de renouvellements descend au-dessous du pourcentage de seuil défini par eureka.server.renewal-percent-threshold. La valeur par défaut est définie sur true sur le serveur Eureka d’origine, mais dans le composant Java Eureka Server, la valeur par défaut est définie sur false. Consultez Limitation du composant Java Serveur Eureka pour Spring. false
eureka.server.renewal-percent-threshold Pourcentage minimal de renouvellements attendus des clients dans la période spécifiée par eureka.server.renewal-threshold-update-interval-ms. Si les renouvellements descendent en dessous du seuil, les expirations sont désactivées si eureka.server.enable-self-preservation est activé. 0.85
eureka.server.renewal-threshold-update-interval-ms Intervalle auquel le seuil, comme spécifié dans eureka.server.renewal-percent-threshold, doit être mis à jour. 0
eureka.server.expected-client-renewal-interval-seconds L’intervalle selon lequel les clients doivent envoyer leurs pulsations. La valeur par défaut est de 30 secondes. Si les clients envoient des pulsations à des fréquences différentes, par exemple toutes les 15 secondes, ce paramètre doit être ajusté en conséquence, sinon l’auto-préservation ne fonctionnera pas comme attendu. 30
eureka.server.response-cache-auto-expiration-in-seconds Obtient la durée pendant laquelle la charge utile du Registre doit être conservée dans le cache si elle n’est pas invalidée par des événements de modification. 180
eureka.server.response-cache-update-interval-ms Obtient l’intervalle de temps selon lequel le cache de la charge utile du client doit être mis à jour. 0
eureka.server.use-read-only-response-cache com.netflix.eureka.registry.ResponseCache utilise actuellement une stratégie de mise en cache à deux niveaux pour les réponses. Un cache readWrite avec une stratégie d’expiration et un cache readonly qui est mis en cache sans expiration. true
eureka.server.disable-delta Vérifie si les informations delta peuvent ou non être fournies au client. false
eureka.server.retention-time-in-m-s-in-delta-queue Obtenir la durée pendant laquelle les informations delta doivent être mises en cache pour que les clients puissent récupérer la valeur sans la manquer. 0
eureka.server.delta-retention-timer-interval-in-ms Obtenir l’intervalle de temps selon lequel la tâche de nettoyage doit sortir de veille et rechercher les informations delta expirées. 0
eureka.server.eviction-interval-timer-in-ms Obtenir l’intervalle de temps selon lequel la tâche qui détermine l’expiration des instances doit sortir de veille et s’exécuter. 60000
eureka.server.sync-when-timestamp-differs Vérifie s’il faut synchroniser des instances lorsque l’horodatage diffère. true
eureka.server.rate-limiter-enabled Indique si le limiteur de débit doit être activé ou désactivé. false
eureka.server.rate-limiter-burst-size Limiteur de débit, propriété d’algorithme de compartiment de jetons. 10
eureka.server.rate-limiter-registry-fetch-average-rate Limiteur de débit, propriété d’algorithme de compartiment de jetons. Spécifie le taux de requête appliqué moyen. 500
eureka.server.rate-limiter-privileged-clients Une liste de clients certifiés. Ceci s’ajoute aux clients Java eureka standard. N/A
eureka.server.rate-limiter-throttle-standard-clients Indiquer si la limite de débit concerne les clients standard. Si la valeur est définie sur false, seuls les clients non standard sont limités. false
eureka.server.rate-limiter-full-fetch-average-rate Limiteur de débit, propriété d’algorithme de compartiment de jetons. Spécifie le taux de requête appliqué moyen. 100

Configurations courantes

  • Configurations relatives à la journalisation :
    • logging.level.*
    • logging.group.*
    • Toute autre configuration sous l’espace de noms logging.* doit être interdite. Par exemple, l’écriture de fichiers journaux en utilisant logging.file doit être interdite.

Appel entre applications

Cet exemple montre comment écrire du code Java pour appeler entre les applications inscrites auprès du composant Eureka Server pour Spring. Lorsque les applications conteneur sont liées à Eureka, elles communiquent entre elles via le serveur Eureka.

L’exemple crée deux applications, un appelant et un appelé. Les deux applications communiquent entre elles à l’aide du composant Eureka Server pour Spring. L’application appelée expose un point de terminaison appelé par l’application appelante.

  1. Créez l’application appelée. Activez le client Eureka dans votre application Spring Boot en ajoutant l’annotation @EnableDiscoveryClient à votre classe principale.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Créez un point de terminaison dans l’application appelée par l’application appelante.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Définissez le nom de l’application appelée dans le fichier de configuration de l’application, par exemple dans application.yml.

    spring.application.name=callee
    
  4. Créez l’application appelante.

    Ajoutez l’annotation @EnableDiscoveryClient pour activer la fonctionnalité du client Eureka. Créez également un bean WebClient.Builder avec l’annotation @LoadBalanced pour effectuer des appels à charge équilibrée vers d’autres services.

    @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. Créez un contrôleur dans l’application appelante qui utilise WebClient.Builder pour appeler l’application appelée à l’aide de son nom d’application, appelée.

    @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);
        }
    }
    

Vous disposez maintenant d’une application appelante et d’une application appelée qui communiquent entre elles à l’aide de composants Java Eureka Server pour Spring. Assurez-vous que les deux applications s’exécutent et sont liées au serveur Eureka avant de tester le point de terminaison /call-callee dans l’application appelante.

Limites

Le composant Java Eureka Server est fourni avec une configuration par défaut, eureka.server.enable-self-preservation, définie sur false. Cette configuration par défaut permet d’éviter les moments où les instances ne sont pas supprimées une fois que l’auto-conservation est activée. Si des instances sont supprimées trop tôt, certaines requêtes peuvent être dirigées vers des instances inexistantes. Si vous souhaitez redéfinir ce paramètre sur true, vous pouvez le remplacer en définissant vos propres configurations dans le composant Java.

Étapes suivantes

Intégrer l’Administration gérée pour Spring à Serveur Eureka pour Spring