Utilizza Gestione delle code o queue.yaml

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 descritti alcuni dei pericoli della combinazione di meccanismi e come gestire i problemi più comuni.

Introduzione

L'API Cloud Tasks fornisce un'interfaccia indipendente da App Engine per il servizio Task Queue di App Engine. Nell'ambito 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 queue.yaml utilizzato dall'SDK di App Engine per creare e configurare anche 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 dell'utilizzo combinato di queue.yaml con i metodi di gestione delle code di Cloud Tasks

Per il servizio sottostante,i file queue.yaml sono definitivi. Se carichi un file queue.yaml che omette le code esistenti nel progetto, indipendentemente da come sono state create, queste code vengono disattivate o messe in pausa. 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:

  1. Chiama CreateQueue per creare una coda denominata "cloud-tasks-queue".
  2. 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 le altre code esistenti in precedenza sono nello stato DISABLED, mentre la coda denominata "queue-yaml-queue" è nello stato RUNNING.

Questo comportamento potrebbe sorprenderti se crei le code tramite l'API Cloud Tasks. Le istruzioni riportate di seguito spiegano come riprendere una coda disattivata.

Analogamente, se una coda è disabilitata nell'API Cloud Tasks, ma in un secondo momento viene visualizzata in un file queue.yaml caricato, la coda viene ripresa.

Se una coda viene eliminata con il metodo DeleteQueue e in un secondo momento viene visualizzata in un file queue.yaml, il caricamento del file queue.yaml può non andare a buon fine perché i nomi coda non possono essere riutilizzati per diversi giorni dopo l'eliminazione.

Best practice

Se non hai mai utilizzato Cloud Tasks o App Engine, utilizza l'API Cloud Tasks esclusivamente 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.

Tuttavia, se sei già un utente di queue.yaml, ti consigliamo di passare ai metodi di gestione delle code solo se conosci i pericoli della combinazione di queue.yaml con i metodi di gestione delle code di Cloud Tasks.

Per impedire agli utenti di mescolare i metodi di gestione delle attività, un'opzione è creare un'app web o uno strumento a riga di comando che tutti gli utenti devono utilizzare per creare, aggiornare ed eliminare le code. L'utilizzo o meno di metodi di gestione della coda Cloud Tasks o 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 venga miscelata inavvertitamente la gestione delle code di Cloud Tasks e l'utilizzo di queue.yaml. Per contribuire a rendere obbligatorio l'utilizzo di uno strumento di questo tipo, puoi concedere allo strumento i ruoli di amministratore della coda e richiedere agli utenti di autenticarsi per utilizzarlo. Per scoprire di più sulla gestione dell'accesso, consulta la sezione Configurazione della coda sicura.

Debug

Puoi esaminare gli audit log per le attività di amministrazione del progetto per recuperare la cronologia delle modifiche alla configurazione delle code, incluse le operazioni di creazione, aggiornamento ed eliminazione 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 riprendere una coda disattivata da un caricamento queue.yaml

Se combini queue.yaml con i metodi di gestione delle code di Cloud Tasks, caricare 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 aggiungerla a queue.yaml e caricarla. Tieni presente che se in precedenza hai impostato un'elaborazione personalizzata rate nella configurazione queue.yaml per la coda, ResumeQueue reimposta la coda su rate predefinito. Questo viene riportato nel maxDispatchesPerSecond campo 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 con l'API Cloud Tasks hanno un valore predefinito massimo di 1000 code. Come in altri casi, la combinazione di metodi queue.yaml e dell'API Cloud Tasks può produrre risultati inaspettati. Ad esempio, supponiamo di creare alcune code utilizzando queue.yaml e di ottenere un aumento della quota a 2000. Se successivamente 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 nella pagina Quote della console .

Ulteriori informazioni sui metodi di gestione della coda di Cloud Tasks

Configurazione della coda e ritardo di avvio della coda

L'applicazione delle modifiche alla configurazione della coda può richiedere diversi minuti. Ad esempio, dopo aver chiamato CreateQueue o UpdateQueue, potrebbero trascorrere diversi minuti prima che tu possa chiamare CreateTask in quella coda.

Cloud Tasks e la coda default App Engine

Alla coda App Engine denominata "predefinita" viene riservato un trattamento speciale nell'SDK App Engine e nell'API Cloud Tasks.

Se la coda default non esiste già, viene creata nelle seguenti situazioni:

  1. Quando un'attività viene aggiunta per la prima volta alla coda default utilizzando l'SDK App Engine.
  2. Quando viene caricato un file queue.yaml che specifica una coda default.
  3. Quando viene chiamato CreateQueue o UpdateQueue per creare la coda default.

Per preservare la compatibilità con App Engine, Cloud Tasks applica le seguenti limitazioni:

  1. Se viene creata una coda denominata "predefinita", deve essere una coda che utilizza le attività App Engine.
  2. Una volta creata, gli utenti non possono eliminare la coda default.

Nell'API Cloud Tasks, quanto segue si applica anche alla coda default:

  1. L'API Cloud Tasks non crea automaticamente la coda default o altre code.
  2. Come per qualsiasi altra coda, l'istruzione GetQueue nella coda default genera un errore di mancata corrispondenza se la chiamata viene effettuata prima della creazione della coda.
  3. Analogamente, la coda default non viene visualizzata nell'output di ListQueues prima della sua creazione.
  4. La configurazione della coda default può essere modificata con la chiamata UpdateQueue.

Passaggi successivi