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
- Compte Azure avec un abonnement actif. Si vous n’en avez pas déjà, vous pouvez en créer un gratuitement.
- Azure CLI.
À 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.
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. Se connecter à Azure avec Azure CLI.
az login
Créez un groupe de ressources.
az group create --name $RESOURCE_GROUP --location $LOCATION
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.
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
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
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
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.
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 valeurAssignableScopes
par votre propre ID d’abonnement.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)
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.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.
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 utilisantlogging.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.
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); } }
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!"; } }
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
Créez l’application appelante.
Ajoutez l’annotation
@EnableDiscoveryClient
pour activer la fonctionnalité du client Eureka. Créez également un beanWebClient.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(); } }
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
Contenu connexe
Intégrer l’Administration gérée pour Spring à Serveur Eureka pour Spring