Questa pagina spiega le differenze tra l'utilizzo dell'API Cloud Tasks per gestire le code e l'utilizzo del caricamento di un file queue.yaml
Cloud Tasks per raggiungere gli stessi scopi. Vengono inoltre discussi alcuni dei
rischi della combinazione di meccanismi e come affrontare i problemi comuni.
Introduzione
L'API Cloud Tasks fornisce un'interfaccia indipendente da App Engine per il servizio App Engine Task Queue. Come parte di questa interfaccia, offre la possibilità di gestire le code, anche tramite la console o il comandogcloud
. Le code create dall'API Cloud Tasks sono accessibili dall'SDK App Engine e viceversa. Per mantenere la compatibilità, è possibile utilizzare il file di configurazione
utilizzato dall'SDK di App Engine, queue.yaml
, anche per creare e configurare
le code da utilizzare tramite l'API Cloud Tasks. Tuttavia, la combinazione della configurazione tramite file con la configurazione tramite l'API Cloud Tasks può produrre conseguenze impreviste.
Insidie della combinazione di queue.yaml
con i metodi di gestione delle code di Cloud Tasks
Per il servizio sottostante,i filequeue.yaml
sono definitivi. Il caricamento di un file queue.yaml
che omette le code esistenti nel tuo progetto, indipendentemente da come sono state create, comporta la disattivazione o la sospensione di queste code. Pertanto, se utilizzi l'API Cloud Tasks per chiamare CreateQueue
o UpdateQueue
e poi carichi un file queue.yaml
che li omette, le code create nelle chiamate Cloud Tasks vengono disattivate.
Considera il seguente scenario:
- Chiama
CreateQueue
per creare una coda denominata "cloud-tasks-queue". Carica un file
queue.yaml
con i seguenti contenuti:queue: - name: queue-yaml-queue
Qual è lo stato attuale delle code in questo progetto? La coda denominata
"cloud-tasks-queue" e qualsiasi altra coda esistente in precedenza si trova nello stato
DISABLED
, mentre la coda denominata "queue-yaml-queue" si trova nello stato RUNNING
.
Questo comportamento potrebbe sorprenderti se crei code tramite l'API Cloud Tasks. Le istruzioni riportate di seguito spiegano come riattivare una coda disattivata.
Allo stesso modo, se una coda è disattivata nell'API Cloud Tasks, ma in seguito viene visualizzata in un file queue.yaml
caricato, la coda viene riattivata.
Se una coda viene eliminata con il metodo DeleteQueue
e successivamente viene visualizzata in un file queue.yaml
, il caricamento di queue.yaml
potrebbe non riuscire perché i nomi delle code non possono essere riutilizzati per diversi giorni dopo l'eliminazione.
Best practice
Se non hai mai utilizzato Cloud Tasks o App Engine, utilizza esclusivamente l'API Cloud Tasks
per gestire le code ed evita del tutto l'utilizzo di queue.yaml
. I metodi di gestione delle code di Cloud Tasks offrono agli utenti una maggiore scelta per la creazione, l'aggiornamento e l'eliminazione delle code.
Se, tuttavia, sei un utente queue.yaml
esistente, devi prendere in considerazione il passaggio ai metodi di gestione delle code solo se comprendi i
rischi di combinare queue.yaml
con i metodi di gestione delle code di Cloud Tasks.
Per impedire agli utenti di combinare metodi di gestione delle attività, una possibilità è
creare un'app web o uno strumento a riga di comando che tutti gli utenti devono utilizzare per creare, aggiornare
ed eliminare le code. Se lo strumento utilizza metodi di gestione delle code di Cloud Tasks o se queue.yaml
è un dettaglio di implementazione dello strumento di cui gli utenti non devono preoccuparsi. Se gli utenti sono tenuti a utilizzare lo strumento,
puoi garantire che non vi sia alcuna combinazione involontaria di
metodi di gestione delle code Cloud Tasks e utilizzo di queue.yaml
.
Per contribuire a imporre l'utilizzo di uno strumento di questo tipo, puoi concedere ruoli di amministratore della coda allo strumento
e richiedere agli utenti di autenticarsi per utilizzarlo. Per scoprire di più sulla gestione
dell'accesso, consulta
Configurazione sicura delle code.
Debug
Puoi esaminare gli audit log per le attività di amministrazione del tuo progetto per recuperare la cronologia delle modifiche alla configurazione delle code, tra cui creazioni, aggiornamenti ed eliminazioni delle code:
gcloud logging read \
'protoPayload.methodName=
(com.google.appengine.legacy.queue_created OR
com.google.appengine.legacy.queue_updated OR
google.cloud.tasks.v2.CloudTasks.CreateQueue OR
google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
google.cloud.tasks.v2.CloudTasks.DeleteQueue)'
Ad esempio, se una coda esistente viene disattivata da un caricamento queue.yaml
, nel log di controllo viene visualizzato il messaggio "Coda disattivata '[QUEUE_NAME]'" tramite il metodo com.google.appengine.legacy.queue_updated
.
Come ripristinare una coda disattivata da un caricamento queue.yaml
Se combini queue.yaml
con i metodi di gestione delle code di Cloud Tasks, il caricamento di un file queue.yaml
potrebbe disattivare accidentalmente una coda creata tramite l'API Cloud Tasks.
Per riprendere la coda, puoi chiamare ResumeQueue
nella coda o aggiungerlo
a queue.yaml
e caricarlo. Tieni presente che se in precedenza avevi impostato un'elaborazione personalizzata
rate
nella configurazione queue.yaml
per la coda,
ResumeQueue
reimposta la coda sul valore predefinito rate
. Ciò si riflette nel campo
maxDispatchesPerSecond
della risposta a ResumeQueue
.
Quote
Se utilizzi queue.yaml
per creare le code, per impostazione predefinita puoi creare un massimo di 100 code. Le code create
utilizzando l'API Cloud Tasks hanno un massimo predefinito di 1000 code. Come in
altri casi, la combinazione di metodi dell'API Cloud Tasks e queue.yaml
può produrre risultati imprevisti. Ad esempio, supponiamo di creare alcune code utilizzando queue.yaml
e poi di ottenere un aumento della quota, ad esempio a 2000. Se in seguito utilizzi il metodo dell'API Cloud Tasks
per creare altre code, riceverai errori di quota. Per risolvere il problema,
invia una richiesta utilizzando Modifica quote dalla pagina Quote della
Google Cloud console.
Ulteriori informazioni sui metodi di gestione delle code di Cloud Tasks
Configurazione delle code e ritardo di avvio delle code
L'applicazione delle modifiche alla configurazione della coda può richiedere diversi minuti. Ad esempio, dopo aver chiamato CreateQueue
o UpdateQueue
, potrebbero
passare diversi minuti prima di poter chiamare correttamente CreateTask
in quella coda.
Cloud Tasks e la coda default
App Engine
La coda App Engine denominata "default" viene trattata in modo speciale nell'SDK App Engine e nell'API Cloud Tasks.
Se la coda default
non esiste già, viene creata nelle seguenti situazioni:
- Quando un'attività viene aggiunta per la prima volta alla
default
coda utilizzando l'SDK App Engine. - Quando viene caricato un file
queue.yaml
che specifica una codadefault
. - Quando viene chiamato
CreateQueue
oUpdateQueue
per creare la codadefault
.
Per mantenere la compatibilità con App Engine, Cloud Tasks applica le seguenti limitazioni:
- Se viene creata una coda denominata "default", deve essere una coda che utilizza le attività App Engine.
- Una volta creata, gli utenti non possono eliminare la coda
default
.
Nell'API Cloud Tasks, quanto segue si applica anche alla coda default
:
- L'API Cloud Tasks non crea automaticamente la coda
default
o qualsiasi altra coda. - Come per qualsiasi altra coda, la chiamata a
GetQueue
nella codadefault
genera un errore di tipo "Elemento non trovato" se viene effettuata prima della creazione della coda. - Analogamente, la coda
default
non viene visualizzata nell'output diListQueues
prima della sua creazione. - La configurazione della coda
default
può essere modificata con la chiamataUpdateQueue
.
Passaggi successivi
- Consulta i metodi disponibili nell'API RPC Cloud Tasks nei documenti di riferimento.
- Consulta i metodi disponibili nell'API REST Cloud Tasks nei documenti di riferimento.
- Scopri di più su
queue.yaml
.