Condividi tramite


Connettersi a un server Eureka gestito per Spring in App contenitore di Azure

Eureka Server gestito per Spring è un registro di servizi che consente ai microservizi di registrarsi e individuare altri servizi. Eureka Server for Spring è disponibile come componente App contenitore di Azure. È possibile associare l'app contenitore a Eureka Server per Spring per la registrazione automatica con il server Eureka.

In questa esercitazione apprenderai a:

  • Creare un componente Eureka Server per Spring Java.
  • Associare l'app contenitore al componente Eureka Server for Spring Java.

Importante

Questa esercitazione usa servizi che possono influire sulla fattura Azure. Se si decide di seguire questa procedura, assicurarsi di eliminare le risorse menzionate in questo articolo per evitare fatturazioni impreviste.

Prerequisiti

Considerazioni

Quando si esegue Eureka Server per Spring in App contenitore, essere consapevoli dei dettagli seguenti:

Elemento Spiegazione
Ambito Il componente di Eureka Server per Spring viene eseguito nello stesso ambiente dell'app contenitore connessa.
Scalabilità Il componente Eureka Server per Spring non può essere ridimensionato. Le proprietà di ridimensionamento minReplicas e maxReplicas sono entrambe impostate su 1. Per ottenere un'elevata disponibilità, vedere Creare un servizio Eureka altamente disponibile in App containerizzate.
Risorse L'allocazione delle risorse del contenitore per Eureka Server per Spring è fissa. Il numero di core CPU è 0.5e le dimensioni della memoria sono 1 Gi.
Prezzi La fatturazione di Eureka Server per Spring rientra nei prezzi basati sul consumo. Le risorse utilizzate dai componenti Java gestiti vengono fatturate alle tariffe attive/inattive. È possibile eliminare i componenti che non sono più in uso per interrompere la fatturazione.
Associazione Le applicazioni container si connettono a un Eureka Server per componenti di Spring tramite un collegamento. Le associazioni inseriscono le configurazioni nelle variabili di ambiente dell'app contenitore. Dopo aver stabilito un'associazione, l'app contenitore può leggere i valori di configurazione dalle variabili di ambiente e connettersi al componente Eureka Server for Spring.

Configurazione

Prima di iniziare a usare il componente Eureka Server for Spring, è prima necessario creare le risorse necessarie.

Esegui i seguenti comandi per creare il tuo gruppo di risorse in un ambiente per app container.

  1. Creare le variabili per supportare la configurazione dell'applicazione. Questi valori vengono forniti ai fini dello svolgimento di questa lezione.

    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"
    
    Variabile Descrizione
    LOCATION Posizione dell'area Azure in cui si crea l'app contenitore e il componente Java.
    ENVIRONMENT Nome dell'ambiente dell'app contenitore per l'applicazione demo.
    RESOURCE_GROUP Nome del gruppo di risorse Azure per l'applicazione demo.
    EUREKA_COMPONENT_NAME Nome del componente Java creato per l'app contenitore. In questo caso, si crea un componente Eureka Server for Spring Java.
    IMAGE Immagine del container usata nella container app.
  2. Accedere a Azure con il interfaccia della riga di comando di Azure.

    az login
    
  3. Creare un gruppo di risorse.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Crea l'ambiente per l'applicazione contenitore.

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

Creare il componente Eureka Server per Spring Java

Ora che si dispone di un ambiente esistente, è possibile creare l'app contenitore e associarla a un'istanza del componente Java di Eureka Server per Spring.

  1. Creare il componente Eureka Server per Spring Java.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. Facoltativo: aggiornare la configurazione 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
    

Associare l'app contenitore al componente Eureka Server for Spring Java

  1. Creare l'app contenitore e associarla al componente Eureka Server for 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. Copiare l'URL dell'app in un editor di testo in modo da poterlo usare in un passaggio successivo.

Tornare all'applicazione contenitore nel portale. Copiare l'URL dell'app in un editor di testo in modo da poterlo usare in un passaggio successivo.

Passare alla /allRegistrationStatus route per visualizzare tutte le applicazioni registrate con il componente Eureka Server for Spring.

L'associazione inserisce diverse configurazioni nell'applicazione come variabili ambiente, principalmente la proprietà eureka.client.service-url.defaultZone. Questa proprietà indica l'endpoint interno del componente Java server Eureka.

Il binding inserisce anche le proprietà seguenti:

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

La proprietà eureka.client.register-with-eureka è impostata su true per applicare la registrazione al server Eureka. Questa registrazione sovrascrive l'impostazione locale in application.properties, dal server di configurazione e così via. Se si vuole impostarlo su false, è possibile sovrascriverlo impostando una variabile di ambiente nell'app contenitore.

La proprietà eureka.instance.prefer-ip-address è impostata su true a causa della regola di risoluzione specifica del sistema dei nomi di dominio nell'ambiente dell'app contenitore. Non modificare questo valore in modo da non interrompere l'associazione.

Facoltativo: dissociare l'app container dal componente Eureka Server per Spring Java

Per rimuovere un'associazione da un'app contenitore, usare l'opzione --unbind.

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

Esaminare l'applicazione tramite il dashboard

Importante

Per visualizzare il dashboard, è necessario avere almeno il ruolo Microsoft.App/managedEnvironments/write assegnato all'account nella risorsa dell'ambiente gestito. È possibile assegnare in modo esplicito il ruolo Owner o Contributor sulla risorsa. È anche possibile seguire la procedura per creare una definizione di ruolo personalizzata e assegnarla all'account.

Nota

Il dashboard non è disponibile in Azure gestito da 21Vianet.

  1. Creare una definizione di ruolo personalizzata.

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

    Assicurarsi di sostituire il segnaposto <SUBSCRIPTION_ID> nel valore AssignableScopes con l'ID della sottoscrizione.

  2. Assegna il ruolo personalizzato al tuo account su una risorsa dell'ambiente gestito.

    Ottenere l'ID risorsa dell'ambiente gestito:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Assegnare il ruolo all'account.

    Prima di eseguire questo comando, sostituire i segnaposto, indicati dalle parentesi <>, con l'ID utente o l'ID entità servizio e il nome del ruolo.

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

    Nota

    Il valore <USER_OR_SERVICE_PRINCIPAL_ID> deve essere in genere l'identità usata per accedere al portale di Azure. Il <ROLE_NAME> valore è il nome assegnato nel passaggio 1.

  4. Ottieni l'URL del server Eureka per il dashboard di 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
    

    Questo comando restituisce l'URL che è possibile usare per accedere al dashboard Eureka Server for Spring. Attraverso il dashboard è possibile visualizzare anche la tua applicazione container, come mostrato nello screenshot seguente.

    Screenshot che mostra il dashboard Eureka Server for Spring.

Facoltativo: integrare il server Eureka per i componenti Spring e Admin per Spring Java

Per integrare i componenti Eureka Server for Spring e Admin for Spring Java, vedere Integrate l'amministratore gestito per Spring con Eureka Server for Spring.

Pulire le risorse

Le risorse create in questa esercitazione hanno effetto sulla fattura di Azure. Se non si intende usare questi servizi a lungo termine, eseguire il comando seguente per rimuovere tutti gli elementi creati in questa esercitazione.

az group delete --resource-group $RESOURCE_GROUP

Elenco di configurazione consentito per il server Eureka per Spring

Le sezioni seguenti descrivono le configurazioni supportate. Per altre informazioni, vedere Spring Cloud Eureka Server.

Nota

È possibile inviare ticket di supporto per le nuove richieste di funzionalità.

Opzioni di configurazione

Il az containerapp update comando usa il --configuration parametro per controllare la configurazione del server Eureka per Spring. È possibile usare più parametri contemporaneamente, purché siano separati da uno spazio. Per altre informazioni, vedere Spring Cloud Eureka Server.

Nella proprietà di configurazione sono disponibili le eureka.server impostazioni di configurazione seguenti:

Name Descrizione Valore predefinito
eureka.server.enable-self-preservation Se abilitata, il server tiene traccia del numero di rinnovi che deve ricevere dal server. Quando il numero di rinnovi scende al di sotto della percentuale di soglia definita da eureka.server.renewal-percent-threshold. Il valore predefinito è impostato su true nel server Eureka originale, ma nel componente Java Server Eureka il valore predefinito è impostato su false. Vedere Limitazioni del server Eureka per il componente Spring Java. false
eureka.server.renewal-percent-threshold Percentuale minima di rinnovi previsti dai client nel periodo specificato da eureka.server.renewal-threshold-update-interval-ms. Se i rinnovi diminuiscono al di sotto della soglia, le scadenze vengono disabilitate se eureka.server.enable-self-preservation è abilitato. 0.85
eureka.server.renewal-threshold-update-interval-ms L'intervallo con cui deve essere aggiornata la soglia, come specificato in eureka.server.renewal-percent-threshold . 0
eureka.server.expected-client-renewal-interval-seconds Intervallo con cui i client devono inviare i relativi heartbeat. Il valore predefinito è 30 secondi. Se i client inviano heartbeat con frequenza diversa, ad esempio ogni 15 secondi, questo parametro deve essere ottimizzato di conseguenza. In caso contrario, l'auto-conservazione non funziona come previsto. 30
eureka.server.response-cache-auto-expiration-in-seconds Ottiene l'ora per cui il payload del Registro di sistema deve essere mantenuto nella cache se gli eventi di modifica non lo invalidano. 180
eureka.server.response-cache-update-interval-ms Ottiene l'intervallo di tempo con cui deve essere aggiornata la cache del payload del client. 0
eureka.server.use-read-only-response-cache Attualmente com.netflix.eureka.registry.ResponseCache usa una strategia di memorizzazione nella cache a due livelli per le risposte. Una readWrite cache con una politica di scadenza e una readonly cache senza scadenza. true
eureka.server.disable-delta Verifica se le informazioni differenziali possono essere fornite ai clienti oppure no. false
eureka.server.retention-time-in-m-s-in-delta-queue Determinare il tempo per il quale le informazioni differenziali devono essere memorizzate nella cache per consentire ai client di recuperare il valore senza perderlo. 0
eureka.server.delta-retention-timer-interval-in-ms Ottiene l'intervallo di tempo con cui l'attività di pulizia deve riattivarsi e verificare la presenza di informazioni delta scadute. 0
eureka.server.eviction-interval-timer-in-ms Ottenere l'intervallo di tempo con cui l'attività che fa scadere le istanze deve riattivarsi ed eseguire. 60000
eureka.server.sync-when-timestamp-differs Controlla se sincronizzare le istanze quando il timestamp è diverso. true
eureka.server.rate-limiter-enabled Indica se il limite di velocità deve essere abilitato o disabilitato. false
eureka.server.rate-limiter-burst-size Limitatore di velocità, proprietà dell'algoritmo a secchio di gettoni. 10
eureka.server.rate-limiter-registry-fetch-average-rate Limitatore di velocità, proprietà dell'algoritmo a secchio di gettoni. Specifica la frequenza media richiesta applicata. 500
eureka.server.rate-limiter-privileged-clients Un elenco di clienti certificati che sono aggiuntivi rispetto ai client standard Java eureka. N/A
eureka.server.rate-limiter-throttle-standard-clients Indicare se i client standard sono soggetti a limiti di flusso in entrata. Se impostato su false, solo i client non standard sono soggetti a limiti di flusso in entrata. false
eureka.server.rate-limiter-full-fetch-average-rate Limitatore di velocità, proprietà dell'algoritmo a secchio di gettoni. Specifica la frequenza media richiesta applicata. 100

Configurazioni comuni

  • Registrazione delle configurazioni correlate:
    • logging.level.*
    • logging.group.*
    • Tutte le altre configurazioni nello logging.* spazio dei nomi devono essere vietate, ad esempio la scrittura di file di log tramite logging.file deve essere vietata.

Chiamare tra applicazioni

Questo esempio illustra come scrivere Java codice da chiamare tra le applicazioni registrate con il componente Eureka Server for Spring. Quando le app contenitore sono associate a Eureka, comunicano tra loro tramite il server Eureka.

Nell'esempio vengono create due applicazioni, un mandante e un destinatario. Entrambe le applicazioni comunicano tra loro usando il componente Eureka Server for Spring. L'applicazione destinataria espone un endpoint a cui si connette l'applicazione chiamante.

  1. Crea l’applicazione destinataria. Abilitare il client Eureka nell'applicazione Spring Boot aggiungendo l'annotazione @EnableDiscoveryClient alla classe principale.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Creare un endpoint nell'applicazione destinataria che sia chiamato dall'applicazione chiamante.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Impostare il nome dell'applicazione chiamata nel file di configurazione dell'applicazione, ad esempio in application.yml.

    spring.application.name=callee
    
  4. Creare l'applicazione chiamante.

    Aggiungere l'annotazione @EnableDiscoveryClient per abilitare la funzionalità client Eureka. Creare inoltre un bean WebClient.Builder con l'annotazione @LoadBalanced per eseguire chiamate con carico bilanciato ad altri servizi.

    @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. Creare un controller nell'applicazione chiamante che utilizza WebClient.Builder per chiamare l'applicazione destinataria utilizzando il suo nome, destinataria.

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

A questo punto, si dispone di un'applicazione chiamante e un'applicazione chiamata che comunicano tra loro utilizzando Eureka Server per i componenti Spring Java. Assicurarsi che entrambe le applicazioni siano in esecuzione e associate al server Eureka prima di testare l'endpoint /call-callee nell'applicazione chiamante.

Limiti

  • Il componente Java Server Eureka include una configurazione predefinita, eureka.server.enable-self-preservation, impostata su false. Questa configurazione predefinita consente di evitare momenti in cui le istanze non vengono eliminate dopo l'abilitazione della conservazione automatica. Se le istanze vengono eliminate troppo presto, alcune richieste potrebbero essere indirizzate a istanze inesistenti. Se si vuole modificare questa impostazione in true, è possibile sovrascriverla impostando le proprie configurazioni nel componente Java.
  • Il dashboard eureka non è disponibile in Azure gestito da 21Vianet.

Passaggi successivi

Integrare l'Amministrazione gestita per Spring con Eureka Server per Spring