Formazione
Modulo
Distribuire microservizi Spring in Azure - Training
Informazioni su come distribuire microservizi Spring Boot in Azure Spring Apps (ASA).
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Eureka Server gestito per Spring è un registro di servizi che consente ai microservizi di registrarsi e individuare altri servizi. Il server Eureka per 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:
Importante
Questa esercitazione usa i servizi che possono influire sulla fattura di Azure. Se si decide di seguire questa procedura, assicurarsi di eliminare le risorse in primo piano in questo articolo per evitare la fatturazione imprevista.
Quando si esegue Eureka Server per Spring in App contenitore, tenere presenti i dettagli seguenti:
Articolo | 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 la disponibilità elevata, vedere Creare un servizio Eureka a disponibilità elevata in App contenitore. |
Risorse | L'allocazione delle risorse del contenitore per Eureka Server per Spring è fissa. Il numero di core CPU è 0,5 e la dimensione della memoria è 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 in base alle tariffe attive/inattive. È possibile eliminare i componenti che non sono più in uso per interrompere la fatturazione. |
Binding | Le app contenitore si connettono a un componente di Eureka Server per Spring tramite un'associazione. 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. |
Prima di iniziare a usare il componente Eureka Server for Spring, è prima necessario creare le risorse necessarie.
Per creare ognuna delle risorse necessarie per creare un'app contenitore, seguire questa procedura:
Cercare App contenitore nel portale di Azure e quindi selezionare Crea.
Nella scheda Informazioni di base immettere i valori seguenti:
Proprietà | valore |
---|---|
Abbonamento | Seleziona la tua sottoscrizione di Azure. |
Gruppo di risorse | Selezionare Crea nuovo per creare un nuovo gruppo di risorse denominato my-resource-group . |
Nome app contenitore | Immettere my-eureka-client. |
Origine distribuzione | Selezionare Immagine del contenitore. |
Paese | Selezionare l'area più vicina. |
Ambiente dell'app contenitore | Selezionare Crea nuovo per creare un nuovo ambiente. |
Nella finestra Crea ambiente app contenitore immettere i valori seguenti:
Proprietà | valore |
---|---|
Nome ambiente | Immettere my-environment. |
Ridondanza della zona | selezionare Disabilitato. |
Selezionare Crea e quindi la scheda Contenitore .
Nella scheda Contenitore immettere i valori seguenti:
Proprietà | valore |
---|---|
Name | Immettere my-eureka-client. |
Origine immagine | Selezionare Docker Hub o altri registri. |
Tipo di immagine | Selezionare Pubblico. |
Server di accesso del Registro di sistema | Immettere mcr.microsoft.com. |
Immagine e tag | Immettere javacomponents/samples/sample-service-eureka-client:latest. |
Selezionare la scheda Ingresso.
Nella scheda Ingresso immettere i valori seguenti e lasciare il resto del modulo compilato con i valori predefiniti.
Proprietà | valore |
---|---|
Dati in ingresso | Selezionare Enabled. |
Traffico in ingresso | Selezionare Accetta traffico da qualsiasi posizione. |
Tipo di ingresso | Selezionare HTTP. |
Porta di destinazione | Immettere 8080. |
Selezionare Rivedi e crea.
Dopo aver superato i controlli di convalida, selezionare Crea per creare l'app contenitore.
Ora che si dispone di un ambiente esistente e di un'app contenitore client Eureka, è possibile creare un'istanza del componente Java di Eureka Server per Spring.
Passare all'ambiente dell'app contenitore nel portale.
Nel menu del servizio, in Servizi, selezionare Servizi.
Selezionare l'elenco a discesa Configura e quindi selezionare Componente Java.
Nel riquadro Configura componente Java immettere i valori seguenti:
Proprietà | valore |
---|---|
Tipo di componente di Java | Selezionare Eureka Server per Spring. |
Nome del componente Java | Immettere eureka. |
Selezionare Avanti.
Nella scheda Rivedi selezionare Configura.
Passare all'ambiente dell'app contenitore nel portale.
Nel menu del servizio, in Servizi, selezionare Servizi.
Selezionare eureka dall’elenco.
In Associazioni selezionare l'elenco a discesa Nome app e quindi selezionare my-eureka-client.
Selezionare la scheda Revisione.
Seleziona Configura.
Tornare all'app contenitore nel portale. Copiare l'URL dell'app in un editor di testo in modo da poterlo usare in un passaggio successivo.
Tornare all'app 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 di Eureka Server.
L'associazione 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 eureka.instance.prefer-ip-address
proprietà è impostata su a true
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.
Passare all'ambiente dell'app contenitore nel portale.
Nel menu del servizio, in Servizi, selezionare Servizi.
Selezionare eureka dall’elenco.
In Binding trovare la riga per my-eureka-client e selezionarla. Quindi seleziona Elimina.
Selezionare Avanti.
Selezionare la scheda Revisione.
Seleziona Configura.
Importante
Per visualizzare il dashboard, è necessario che all'account sia assegnato almeno il ruolo Microsoft.App/managedEnvironments/write
nella risorsa ambiente gestita. È possibile assegnare in modo esplicito il Owner
ruolo o Contributor
nella risorsa. È anche possibile seguire la procedura per creare una definizione di ruolo personalizzata e assegnarla all'account.
Nota
Il dashboard non è disponibile in Azure Cina 21Vianet.
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 <SUBSCRIPTION_ID>
segnaposto nel valore con l'ID AssignableScopes
sottoscrizione.
Assegnare il ruolo personalizzato all'account in 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)
Assegnare il ruolo all'account.
Prima di eseguire questo comando, sostituire i segnaposto, indicati dalle <>
parentesi quadre, con l'ID utente o l'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 <USER_OR_SERVICE_PRINCIPAL_ID>
valore deve in genere essere l'identità usata per accedere al portale di Azure. Il <ROLE_NAME>
valore è il nome assegnato nel passaggio 1.
Ottenere l'URL del dashboard di Eureka Server per 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. Con il dashboard è anche possibile visualizzare l'app contenitore, come illustrato nello screenshot seguente.
Per integrare i componenti Java per Eureka Server per Spring e Amministrazione per Spring, vedere Integrare l'Amministrazione gestita per Spring con Eureka Server per Spring.
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
Le sezioni seguenti descrivono le configurazioni supportate. Per altre informazioni, vedere Spring Cloud Eureka Server.
Nota
Inviare ticket di supporto per le nuove richieste di funzionalità.
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:
Nome | Descrizione | Default value |
---|---|---|
eureka.server.enable-self-preservation |
Se abilitata, il server tiene traccia del numero di rinnovi che deve ricevere dal server. Ogni volta che 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 Eureka Server Java il valore predefinito è impostato su false . Vedere Limitazioni del componente Eureka Server per 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, la conservazione automatica non funzionerà 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 non è invalidato dagli eventi di modifica. | 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 un criterio di scadenza e una readonly cache che memorizza nella cache senza scadenza. |
true |
eureka.server.disable-delta |
Verifica se le informazioni differenziali possono essere gestite al client o meno. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Ottenere il tempo per il quale le informazioni differenziali devono essere memorizzate nella cache per i client per recuperare il valore senza mancante. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
Ottenere 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 scade 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 |
Limiter di frequenza, proprietà dell'algoritmo del bucket del token. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Limiter di frequenza, proprietà dell'algoritmo del bucket del token. Specifica la frequenza media richiesta applicata. | 500 |
eureka.server.rate-limiter-privileged-clients |
Elenco di client certificati. Oltre ai client Java eureka standard. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Indicare se i client standard del limite di velocità. Se impostato su false , solo i client non standard sono limitati. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Limiter di frequenza, proprietà dell'algoritmo del bucket del token. Specifica la frequenza media richiesta applicata. | 100 |
logging.level.*
logging.group.*
logging.*
spazio dei nomi devono essere vietate, ad esempio la scrittura di file di log tramite logging.file
deve essere vietata.Questo esempio illustra come scrivere codice Java per chiamare tra 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 chiamante e un chiamato. Entrambe le applicazioni comunicano tra loro usando il componente Eureka Server for Spring. L'applicazione chiamata espone un endpoint chiamato dall'applicazione chiamante.
Creare l'applicazione chiamata. 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);
}
}
Creare un endpoint nell'applicazione chiamata dall'applicazione chiamante.
@RestController
public class CalleeController {
@GetMapping("/call")
public String calledByCaller() {
return "Hello from Application callee!";
}
}
Impostare il nome dell'applicazione chiamata nel file di configurazione dell'applicazione, ad esempio in application.yml.
spring.application.name=callee
Creare l'applicazione chiamante.
Aggiungere l'annotazione per abilitare la @EnableDiscoveryClient
funzionalità client Eureka. Creare inoltre un WebClient.Builder
bean 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();
}
}
Creare un controller nell'applicazione chiamante che usa WebClient.Builder
per chiamare l'applicazione chiamata usando il nome dell'applicazione, chiamato.
@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 è disponibile un chiamante e un'applicazione chiamata che comunicano tra loro usando 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.
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.Integrare l'Amministrazione gestita per Spring con Eureka Server per Spring
Formazione
Modulo
Distribuire microservizi Spring in Azure - Training
Informazioni su come distribuire microservizi Spring Boot in Azure Spring Apps (ASA).