Utilizza la gestione delle code o code.yaml

Questa pagina spiega le differenze tra l'uso dell'API Cloud Tasks per gestire le code e l'uso del caricamento di un file Cloud Tasks queue.yaml o queue.xml per ottenere gli stessi risultati. Discute inoltre di alcune insidie dei meccanismi di miscelazione e di come affrontare i problemi comuni.

Introduzione

L'API Cloud Tasks fornisce un'interfaccia indipendente da App Engine al servizio Coda di attività App Engine. Come parte di questa interfaccia, offre la possibilità di gestire le code, anche attraverso la console o il comando gcloud. 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 di configurazione tramite file con la configurazione tramite l'API Cloud Tasks può avere conseguenze impreviste.

Insetti tra la combinazione di queue.yaml e i metodi di gestione delle code di Cloud Tasks

Per il servizio sottostante, queue.yaml file sono definitivi. Se carichi un elemento queue.yaml che omette le code esistenti nel progetto, indipendentemente da come sono state create, tali code verranno disattivate o in pausa. Pertanto, se utilizzi l'API Cloud Tasks per chiamare CreateQueue o UpdateQueue e poi carichi un file queue.yaml che omette queste informazioni, le code create nelle chiamate Cloud Tasks vengono disabilitate.

Considera la seguente situazione:

  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 di questo progetto? La coda denominata "cloud-tasks-queue" e qualsiasi altra coda esistente in precedenza sono in stato DISABLED e la coda denominata "quoue;yaml-queue" è in stato RUNNING.

Questo comportamento potrebbe sorprenderti se crei code tramite l'API Cloud Tasks. Le istruzioni riportate di seguito spiegano come ripristinare 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 di queue.yaml non può 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 l'API Cloud Tasks esclusivamente per gestire le code ed evitare del tutto l'utilizzo di queue.yaml e queue.xml. I metodi di gestione delle code di Cloud Tasks consentono agli utenti di scegliere meglio come creare, aggiornare ed eliminare le code.

Se, tuttavia, sei un utente di queue.yaml o queue.xml esistente, dovresti prendere in considerazione il passaggio ai metodi di gestione delle code solo se comprendi le insidie della combinazione di queue.yaml con i metodi di gestione delle code di Cloud Tasks.

Per semplificare l'utilizzo di un solo metodo di configurazione, puoi utilizzare gruppi e autorizzazioni per controllare l'accesso alle attività di gestione delle code. Per le istruzioni, vedi Configurazione della coda sicura.

Debug

Puoi controllare i log di controllo delle attività di amministrazione del progetto per recuperare la cronologia delle modifiche alla configurazione delle code, tra cui la creazione di code, gli aggiornamenti e le eliminazioni:

    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 è disabilitata da un caricamento queue.yaml, nel log di controllo tramite il metodo com.google.appengine.legacy.queue_updated verrà visualizzato il messaggio "Coda disattivata" [QUEUE_NAME]'.

Come ripristinare una coda disattivata tramite caricamento di queue.yaml

Se combini queue.yaml con i metodi di gestione delle code di Cloud Tasks, il caricamento di un file queue.yaml potrebbe comportare la disattivazione accidentale di una coda creata tramite l'API Cloud Tasks.

Per riprendere la coda, puoi chiamare ResumeQueue in coda o aggiungerla a queue.yaml e caricarla. Tieni presente che se in precedenza hai impostato un'elaborazione personalizzata rate nella configurazione queue.yaml della 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 tue 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, l'unione di metodi queue.yaml e API Cloud Tasks può produrre risultati imprevisti. Ad esempio, supponi di creare alcune code utilizzando queue.yaml e di ricevere un aumento della quota, ad esempio 2000. Se successivamente utilizzerai il metodo API Cloud Tasks per creare altre code, otterrai errori relativi alla quota. Per risolvere il problema, invia una richiesta utilizzando la funzionalità Modifica quote della pagina Quote della console.

Informazioni aggiuntive sui metodi di gestione delle code di Cloud Tasks

Configurazione della coda e ritardo di avvio della coda

Le modifiche alla configurazione della coda possono richiedere diversi minuti per diventare effettive. 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 di App Engine denominata "default" riceve un trattamento speciale nell'SDK di App Engine e nell'API Cloud Tasks.

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

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

Per mantenere la compatibilità con App Engine, Cloud Tasks applica le seguenti restrizioni:

  1. Se viene creata una coda denominata "default" deve essere una coda che utilizza attività di 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 qualsiasi altra coda.
  2. Come per qualsiasi altra coda, se chiami GetQueue sulla coda default si verifica un errore non trovato se la chiamata viene effettuata prima della creazione della coda.
  3. Allo stesso modo, la coda default non compare nell'output di ListQueues prima di essere creata.
  4. La configurazione della coda default può essere modificata con la chiamata UpdateQueue.

Passaggi successivi