Migrazione delle code push a Cloud Tasks (Python)

Questa pagina descrive come eseguire la migrazione del codice delle code in modalità push dalle code di attività a Cloud Tasks. Cloud Tasks è ora il modo preferito per lavorare con le code push di App Engine.

Cloud Tasks ti consente di accedere allo stesso servizio a cui accedi con l'API RPC Task Queues. Ciò significa che non devi ricreare le code e le attività push esistenti. Tuttavia, devi eseguire la migrazione codice che crea o interagisce con code in modalità push o attività push per utilizzare l'API Cloud Tasks.

Puoi creare ed eseguire interazioni con le code push e le attività push utilizzando le API REST e RPC di Cloud Tasks, la libreria client di Cloud Tasks, Google Cloud CLI e la console Google Cloud. Questa pagina fornisce esempi relativi all'utilizzo gcloud CLI e Cloud Tasks libreria client.

In Cloud Tasks, tutte le code funzionano come code push. Nella nella parte restante di questa guida e documentazione di Cloud Tasks, il termine coda è equivalente al termine coda push. Analogamente, il termine task è equivalente al termine task push.

Funzionalità non disponibili in Cloud Tasks

Le seguenti funzionalità non sono disponibili in Cloud Tasks:

  • Accodamento delle attività nelle transazioni Datastore
  • Utilizzo della libreria delle attività differite anziché di un servizio worker
  • Utilizzo delle attività nelle applicazioni multi-tenant
  • Simulazione con il server di sviluppo locale
  • Aggiunta di attività in modo asincrono

Prezzi e quote

La migrazione delle code push a Cloud Tasks potrebbe influire sui prezzi e sulle quote della tua app.

Prezzi

Cloud Tasks prevede prezzi specifici. Come con code di attività, l'invio di richieste all'app App Engine con un può comportare costi aggiuntivi per la tua app.

Quote

Le quote di Cloud Tasks sono diverse le quote per le code di attività. Come con Code di attività, invio di richieste all'app App Engine da Cloud Tasks potrebbe influire su App Engine quote per le richieste.

Prima della migrazione

Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python per utilizzare una versione di Python compatibile con Google Cloud e installa gli strumenti di test per creare ambienti Python isolati.

Le sezioni seguenti illustrano i passaggi di configurazione prima di eseguire la migrazione delle code push a Cloud Tasks.

Migrazione delle code in modalità pull

Prima di iniziare, esegui la migrazione delle code pull prima di seguire le istruzioni riportate in questa guida per eseguire la migrazione delle code push. La migrazione delle code in modalità pull dopo la migrazione delle code in modalità push consigliato perché è probabile che l'uso obbligatorio del file queue.yaml causi un comportamento imprevisto con Cloud Tasks.

Protezione della configurazione delle code

Una volta avviato il processo di migrazione a Cloud Tasks, la modifica del file queue.yaml può causare un comportamento imprevisto e non è consigliata. Proteggi la configurazione della coda dalle modifiche apportate dal file queue.yaml seguendo i passaggi che seguono.

  1. Configura gcloud CLI per omettere il file queue.yaml in futuro deployment di machine learning.

    Aggiungi il tuo file queue.yaml a un file .gcloudignore. Per verificare se hai già un file .gcloudignore, puoi eseguire il seguente comando nel terminale dalla directory di primo livello della tua app. Questo comando mostrerà il nome del file se esiste.

    ls -a | grep .gcloudignore

    Per saperne di più sui file .gcloudignore, consulta la pagina relativa al riferimento .gcloudignore.

  2. Limita le autorizzazioni per il file queue.yaml.

    Segui le best practice descritte nella nostra guida sulle di proteggere la configurazione della coda.

  3. Scopri di più su Cloud Tasks e sul file queue.yaml (facoltativo).

    Quando utilizzi l'API Cloud Tasks per gestire la configurazione della coda, il deployment di un file queue.yaml sostituisce la configurazione impostata da Cloud Tasks, il che può causare un comportamento imprevisto. Per saperne di più, consulta Gestione delle code e queue.yaml.

Attivazione dell'API Cloud Tasks

Per attivare l'API Cloud Tasks, fai clic su Attiva sull'API Cloud Tasks nella libreria API. Se vedi un pulsante Gestisci anziché un pulsante Abilita, significa che hai già abilitato l'API Cloud Tasks per il tuo progetto e non devi ripetere l'operazione.

Autenticazione dell'app all'API Cloud Tasks

Devi autenticare la tua app nell'API Cloud Tasks. Questa sezione discute l'autenticazione per due diversi casi d'uso.

Per sviluppare o testare l'app localmente, ti consigliamo di utilizzare un account di servizio. Per per istruzioni su come configurare un account di servizio e connetterlo alla tua app, leggi Ottenere e fornire manualmente le credenziali dell'account di servizio.

Per eseguire il deployment dell'app su App Engine, non è necessario fornire nuova autenticazione. Le credenziali predefinite dell'applicazione (ADC) deducono l'autenticazione per le app di App Engine.

Download di gcloud CLI

Scarica e installa gcloud CLI per utilizzare gcloud CLI con l'API Cloud Tasks se non hai già installato in precedenza. Esegui questo comando dal tuo terminale se abbia già installato gcloud CLI.

gcloud components update

Importazione delle librerie client di Cloud

Per utilizzare la libreria client di Cloud Tasks con App di App Engine:

  1. Aggiorna il file app.yaml. Segui le istruzioni per la tua versione di Python:

    Python 2

    Per le app Python 2, aggiungi le ultime versioni di grpcio e setuptools librerie.

    Di seguito è riportato un esempio di file app.yaml:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: latest
    - name: setuptools
      version: latest
    

    Python 3

    Per le app Python 3, specifica l'elemento runtime nel file app.yaml con una versione Python 3 supportata. Ad esempio:

    runtime: python310 # or another support version
    

    Il runtime Python 3 installa le librerie automaticamente, quindi non è necessario specificare le librerie integrate del runtime Python 2 precedente. Se la tua app Python 3 utilizza altri servizi in bundle legacy quando migrazione, puoi continuare a specificare le librerie integrate necessarie. In alternativa, puoi eliminare le righe non necessarie nel file app.yaml.

  2. Aggiorna il file requirements.txt. Segui le istruzioni relative alla tua versione di Python:

    Python 2

    Aggiungi le librerie client di Cloud per Cloud Tasks al tuo elenco di dipendenze nel file requirements.txt.

    google-cloud-tasks
    

    Quindi, esegui pip install -t lib -r requirements.txt per aggiornare l'elenco delle librerie disponibili per la tua app.

    Python 3

    Aggiungi le librerie client di Cloud per Cloud Tasks a dell'elenco delle dipendenze nel file requirements.txt.

    google-cloud-tasks
    

    App Engine installa automaticamente queste dipendenze durante deployment nel runtime Python 3, quindi elimina la cartella lib, se presente esiste già.

  3. Per le app Python 2, se la tua app utilizza librerie integrate o copiate, devi specificare questi percorsi nel file appengine_config.py, situato nel percorso stessa cartella del tuo file app.yaml:

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    Il file appengine_config.py presuppone che lo stato attuale è la posizione in cui si trova la cartella lib. In alcuni casi, ad esempio per l'unità la directory di lavoro corrente può essere diversa. Per evitare errori, può passare esplicitamente il percorso completo alla cartella lib utilizzando:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. Importa la libreria client di Cloud Tasks in tutti i file che utilizzano le code push dall'API Task Queues:

    from google.cloud import tasks

    Una volta completata la migrazione completa di tutto il codice che crea o interagisce con le code push in Cloud Tasks, rimuovi le istruzioni che importano l'API Task Queues, ad esempio from google.appengine.api import taskqueue.

Creazione e gestione delle code

In questa sezione viene descritto come creare e gestire le code utilizzando API Cloud Tasks.

Con Cloud Tasks, non utilizzi un file queue.yaml per creare o gestire le code. Utilizza invece l'API Cloud Tasks. Se utilizzi sia queue.yaml e l'API Cloud Tasks non sono consigliati, ma potrebbe essere una parte inevitabile della migrazione dalle code di attività di Cloud Tasks, a seconda dell'app. Letto Utilizzo della gestione delle code e della gestione delle code.yaml per l'apprendimento sulle best practice.

Creazione di code

Leggi questa sezione se la tua app crea code a livello di programmazione o se vuoi creare code aggiuntive dalla riga di comando.

In Cloud Tasks, i nomi delle code hanno il formato projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID. La parte LOCATION_ID del nome della coda corrisponde a una regione Google Cloud. La QUEUE_ID parte del nome della coda equivale al Campo name coda di attività. Il nome della coda viene generato durante la creazione della coda in base al progetto, alla regione e al QUEUE_ID specificati.

In generale, la posizione della coda (ovvero la regione) deve essere la stessa della regione della tua app. Le due eccezioni a questa regola riguardano le app che utilizzano la regione europe-west e le app che utilizzano la regione us-central. In Cloud Tasks, queste regioni sono rispettivamente denominate europe-west1 e us-central1.

Puoi specificare una configurazione facoltativa della coda durante la creazione della coda, ma puoi farlo anche aggiornando la coda dopo averla creata.

Non è necessario ricreare le code esistenti. Esegui invece la migrazione del codice interagisce con le code esistenti leggendo le parti pertinenti di questa guida.

Riutilizzo dei nomi delle code

Devi attendere 7 giorni dopo l'eliminazione di una coda per creare una coda con lo stesso ID coda nello stesso progetto e nella stessa località (ad es. regione).

L'esempio seguente crea due code utilizzando Cloud Tasks. La la prima coda ha l'ID coda queue-blue ed è configurata per inviare tutte le attività a la versione v2 del servizio task-module a una tariffa di 5/s. La seconda coda ha l'ID coda queue-red e invia le attività a una frequenza di 1/s. Entrambi sono stati creati nel progetto con ID progetto my-project-id nella località us-central1. Si tratta dell'equivalente in Cloud Tasks della creazione di code in Code di attività.

gcloud

gcloud CLI deduce il progetto e la località la configurazione della gcloud CLI.

gcloud tasks queues create queue-blue \
--max-dispatches-per-second=5 \
--routing-override=service:task-module,version:v2
gcloud tasks queues create queue-red \
--max-dispatches-per-second=1

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue_blue_name = 'queue-blue'
# queue_red_name = 'queue-red'

parent = f"projects/{project}/locations/{location}"

queue_blue = {
    "name": client.queue_path(project, location, queue_blue_name),
    "rate_limits": {"max_dispatches_per_second": 5},
    "app_engine_routing_override": {"version": "v2", "service": "task-module"},
}

queue_red = {
    "name": client.queue_path(project, location, queue_red_name),
    "rate_limits": {"max_dispatches_per_second": 1},
}

queues = [queue_blue, queue_red]
for queue in queues:
    response = client.create_queue(parent=parent, queue=queue)
    print(response)

Per saperne di più, consulta la pagina di riferimento di Cloud Tasks sulla creazione di una coda Cloud Tasks.

Impostare la frequenza di elaborazione della coda

La tabella seguente elenca i campi che differiscono da Task Queues a Cloud Tasks.

Campo Code di attività Campo Cloud Tasks Descrizione
rate max_dispatches_per_second La frequenza massima con cui le attività vengono inviate dalla coda
max_concurrent_requests max_concurrent_dispatches Il numero massimo di attività in parallelo che possono essere inviate dall'account coda
bucket_size max_burst_size

Cloud Tasks calcola una proprietà di sola lettura max_burst_size che limita la velocità di elaborazione delle attività nella coda in base al valore di max_dispatches_per_second. Questo campo consente alla coda di avere un tasso elevato in modo che l'elaborazione inizi poco dopo l'inserimento di un'attività, ma limita comunque l'utilizzo delle risorse quando molte attività vengono inserite in coda in un breve periodo di tempo.

Per le code App Engine create o aggiornate utilizzando un queue.yaml file, max_burst_size è inizialmente uguale a bucket_size. Tuttavia, se la coda viene successivamente passata a un update utilizzando un qualsiasi comando Cloud Tasks a riga di comando, max_burst_size verrà reimpostato in base all'interfaccia di max_dispatches_per_second, indipendentemente dal fatto che max_dispatches_per_second è aggiornato.

total_storage_limit Ritirata in Cloud Tasks Cloud Tasks non supporta l'impostazione di un limite di spazio di archiviazione personalizzato

Puoi impostare la frequenza di elaborazione della coda quando la crei o successivamente. L'esempio seguente utilizza Cloud Tasks per impostare velocità di elaborazione su una coda denominata queue-blue già creata. Se queue-blue è stato creato o configurato utilizzando un file queue.yaml, come segue esempio reimpostamax_burst_size in base al valore max_dispatches_per_second di 20. Si tratta dell'equivalente in Cloud Tasks dell'impostazione della frequenza di elaborazione della coda nelle code di attività.

gcloud

gcloud tasks queues update queue-blue \
--max-dispatches-per-second=20 \
--max-concurrent-dispatches=10

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue-blue'

# Get queue object
queue_path = client.queue_path(project, location, queue)
queue = client.get_queue(name=queue_path)

# Update queue object
queue.rate_limits.max_dispatches_per_second = 20
queue.rate_limits.max_concurrent_dispatches = 10

response = client.update_queue(queue=queue)
print(response)

Per ulteriori informazioni, consulta Definire i limiti di frequenza.

Disattivare e riprendere le code

Cloud Tasks utilizza il termine metti in pausa nello stesso modo in cui Task Queues utilizza il termine disattiva. Mettendo in pausa una coda, l'esecuzione delle attività al suo interno viene interrotta fino a quando la coda non viene ripresa. Tuttavia, puoi continuare ad aggiungere attività a una coda in pausa. Cloud Tasks utilizza il termine riprendi come fa la coda di attività.

L'esempio seguente mette in pausa una coda con ID coda queue1 . Si tratta dell'equivalente in Cloud Tasks della disattivazione delle code nelle code di attività.

gcloud

gcloud tasks queues pause 

queue1

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.pause_queue(name=queue_path)

Per saperne di più, leggi la documentazione di riferimento di Cloud Tasks Messa in pausa code.

Eliminazione delle code in corso...

Dopo aver eliminato una coda, devi attendere 7 giorni prima di crearne una con lo stesso nome. Valuta la possibilità di eliminare tutte le attività da una coda e riconfigurazione della coda se non puoi attendere 7 giorni.

Nell'esempio seguente viene eliminata la coda con ID coda queue1 . Questo è l'equivalente di Cloud Tasks eliminazione delle code nelle code di attività.

gcloud

gcloud tasks queues delete 

queue1

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.delete_queue(name=queue_path)

Per saperne di più, consulta la pagina di riferimento di Cloud Tasks su Eliminazione delle code.

Creazione e gestione delle attività

Questa sezione descrive come creare e gestire le attività utilizzando l'API Cloud Tasks.

Creazione di attività

Nella tabella seguente sono elencati i campi che differiscono dalle code di attività in Cloud Tasks.

Campo Code di attività Campo Cloud Tasks Descrizione
NOVITÀ in Cloud Tasks app_engine_http_request Crea una richiesta che ha come target un servizio App Engine. Questi vengono definite attività di App Engine.
method http_method Specifica il metodo di richiesta. ad esempio POST
url relative_uri Specifica l'handler dell'attività. Nota la differenza nella lettera finale: i per Uniform Resource Identifier anziché per l per Uniform Resource Locator
target app_engine_routing Facoltativo. Specifica service, version e instance di App Engine per un'attività di App Engine. Se non viene configurato, viene utilizzato il servizio predefinito, la versione e l'istanza.

L'esempio seguente crea un'attività che indirizza a un servizio App Engine denominato worker con l'handler /update_counter. Questo è l'equivalente di Cloud Tasks creazione in corso tasks nelle code di attività.

gcloud

gcloud tasks create-app-engine-task --queue=default \
--method=POST --relative-uri=/update_counter --routing=service:worker \
--body-content=10

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'
amount = 10

parent = client.queue_path(project, location, queue)

task = {
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.POST,
        "relative_uri": "/update_counter",
        "app_engine_routing": {"service": "worker"},
        "body": str(amount).encode(),
    }
}

response = client.create_task(parent=parent, task=task)
eta = response.schedule_time.strftime("%m/%d/%Y, %H:%M:%S")
print(f"Task {response.name} enqueued, ETA {eta}.")

Per scoprire di più, leggi la documentazione di riferimento di Cloud Tasks su Creazione di attività App Engine.

Specifica del servizio target e del routing

Specifica il servizio, la versione e l'istanza di destinazione di App Engine per Le attività di App Engine sono facoltative. Per impostazione predefinita, le attività App Engine vengono inoltrate al servizio, alla versione e all'istanza predefiniti al momento del tentativo di esecuzione dell'attività.

Imposta la proprietà app_engine_routing dell'attività durante la creazione per specificare un valore un servizio, una versione o un'istanza di App Engine diversi per la tua attività.

Per instradare tutte le attività di una determinata coda allo stesso servizio, alla stessa versione e alla stessa istanza di App Engine, puoi impostare la proprietà app_engine_routing_override sulla coda.

Per saperne di più, leggi la documentazione di riferimento di Cloud Tasks Configurare il routing.

Trasferimento dei dati al gestore

Come con le code di attività, puoi passare i dati all'handler in due modi utilizzando Cloud Tasks. Puoi passare i dati come parametri di query nell'URI relativo oppure nel corpo della richiesta utilizzando i metodi HTTP POST o PUT.

Cloud Tasks utilizza il termine body nello stesso modo in cui Task Queues utilizza il termine payload. In Cloud Tasks, il tipo di contenuto predefinito del corpo è stream di byte anziché testo normale. Puoi impostare il tipo di contenuti del corpo specificandolo nell'intestazione.

L'esempio seguente passa una chiave al gestore /update_counter in due modi diversi. Si tratta dell'equivalente in Cloud Tasks della trasmissione dei dati all'handler in Code di attività.

console

gcloud tasks create-app-engine-task --queue=default --method=GET  \
--relative-uri=

/update_counter

?key=blue --routing=service:worker
gcloud tasks create-app-engine-task --queue=default --method=POST \
--relative-uri=

/update_counter

 --routing=service:worker \
--body-content="{'key': 'blue'}"

libreria client

import json

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'

parent = client.queue_path(project, location, queue)

task1 = {
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.POST,
        "relative_uri": "/update_counter?key=blue",
        "app_engine_routing": {"service": "worker"},
    }
}

task2 = {
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.POST,
        "relative_uri": "/update_counter",
        "app_engine_routing": {"service": "worker"},
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps({"key": "blue"}).encode(),
    }
}

response = client.create_task(parent=parent, task=task1)
print(response)
response = client.create_task(parent=parent, task=task2)
print(response)

Attività di denominazione

Specificare il nome dell'attività è facoltativo. Se non specifichi il nome dell'attività, Cloud Tasks lo genera per te generando un ID attività e deducendo il progetto e la posizione (ovvero la regione) in base alla coda specificata durante la creazione dell'attività.

I nomi delle attività hanno il formato projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID. La parte TASK_ID del nome dell'attività è equivalente al campo name dell'attività Code di attività.

Riutilizzo dei nomi delle attività

Devi attendere prima di riutilizzare il nome di un'attività. Il tempo di attesa prima di farlo varia a seconda che la coda che ha inviato l'attività sia stata creata in Cloud Tasks o in CodeQueue.

Per le attività nelle code create utilizzando le code di attività (inclusa la coda predefinita), devi attendere circa 9 giorni dall'eliminazione o dall'esecuzione dell'attività originale. Per le attività in code create utilizzando Cloud Tasks, devi attendere circa un'ora dopo l'attività originale è stata eliminata o eseguita.

L'esempio seguente crea un'attività con TASK_ID impostato su first-try e la aggiunge alla coda predefinita. Si tratta dell'equivalente in Cloud Tasks della denominazione delle attività nelle code di attività.

gcloud

L'interfaccia a riga di comando gcloud crea il nome dell'attività deducendo il progetto e la posizione dalla configurazione.

gcloud tasks create-app-engine-task first-try --queue=default \
--method=GET --relative-uri=

/url/path

libreria client

Con la libreria client, devi specificare il nome completo dell'attività se vuoi specificare TASK_ID. Il progetto e la località devono corrispondere il progetto e la posizione della coda a cui viene aggiunta l'attività.

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'default'
# task_name = 'first-try'

parent = client.queue_path(project, location, queue)

task = {
    "name": client.task_path(project, location, queue, task_name),
    "app_engine_http_request": {
        "http_method": tasks.HttpMethod.GET,
        "relative_uri": "/url/path",
    },
}
response = client.create_task(parent=parent, task=task)
print(response)

Nuovo tentativo di attività non riuscite

Puoi impostare la configurazione del nuovo tentativo delle attività nelle code durante la loro creazione o aggiornandole. La tabella seguente elenca il campo CodePipeline Task Queues e il campo Cloud Tasks corrispondente.

Campo Code di attività Campo Cloud Tasks
task_retry_limit max_attempts
task_age_limit max_retry_duration
min_backoff_seconds min_backoff
max_backoff_seconds max_backoff
max_doublings max_doublings

Parametri di ripetizione specifici per l'attività

Parametri per i nuovi tentativi specifici dell'attività configurati in Le code di attività funzionano in Cloud Tasks, non possono modificarli né impostarli per nuove attività. Per modificare i parametri dei nuovi tentativi per un che ha parametri specifici per i nuovi tentativi, ricreala con Coda di Cloud Tasks con i parametri desiderati per i nuovi tentativi.

L'esempio seguente illustra vari scenari di nuovo tentativo:

  • In fooqueue, i tentativi di esecuzione delle attività vengono ripetuti fino a sette volte e per un massimo di due giorni dal primo tentativo di esecuzione. Dopo il superamento di entrambi i limiti, l'operazione non riesce definitivamente.
  • In barqueue, App Engine tenta di ripetere i tentativi sulle attività, aumentando in modo lineare l'intervallo tra ogni tentativo fino a raggiungere il backoff massimo e tentando indefinitamente all'intervallo massimo (quindi gli intervalli tra le richieste sono 10 s, 20 s, 30 s, ..., 190 s, 200 s, 200 s e così via).
  • In bazqueue, l'intervallo tra i tentativi inizia a 10 secondi, poi raddoppia tre volte, poi aumenta in modo lineare e infine esegue tentativi indefiniti all' intervallo massimo (quindi gli intervalli tra le richieste sono 10 secondi, 20 secondi, 40 secondi, 80 secondi, 160 secondi, 240 secondi, 300 secondi, 300 secondi e così via).

Questo è l'equivalente di Cloud Tasks nuovo tentativo in corso tasks nelle code di attività.

gcloud

Quando imposti opzioni che specificano un numero di secondi, devi includere s dopo il numero intero (ad es. 200s non 200).

gcloud tasks queues create fooqueue \
--max-attempts=7 \
--max-retry-duration=172800s  #2*60*60*24 seconds in 2 days
gcloud tasks queues create barqueue \
--min-backoff=10s \
--max-backoff=200s \
--max-doublings=0
gcloud tasks queues create bazqueue \
--min-backoff=10s \
--max-backoff=300s \
--max-doublings=3

libreria client

from google.protobuf import duration_pb2

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# fooqueue = 'fooqueue'
# barqueue = 'barqueue'
# bazqueue = 'bazqueue'

parent = f"projects/{project}/locations/{location}"

max_retry = duration_pb2.Duration()
max_retry.seconds = 2 * 60 * 60 * 24

foo = {
    "name": client.queue_path(project, location, fooqueue),
    "rate_limits": {"max_dispatches_per_second": 1},
    "retry_config": {"max_attempts": 7, "max_retry_duration": max_retry},
}

min = duration_pb2.Duration()
min.seconds = 10

max = duration_pb2.Duration()
max.seconds = 200

bar = {
    "name": client.queue_path(project, location, barqueue),
    "rate_limits": {"max_dispatches_per_second": 1},
    "retry_config": {"min_backoff": min, "max_backoff": max, "max_doublings": 0},
}

max.seconds = 300
baz = {
    "name": client.queue_path(project, location, bazqueue),
    "rate_limits": {"max_dispatches_per_second": 1},
    "retry_config": {"min_backoff": min, "max_backoff": max, "max_doublings": 3},
}

queues = [foo, bar, baz]
for queue in queues:
    response = client.create_queue(parent=parent, queue=queue)
    print(response)

Per saperne di più, consulta la documentazione di riferimento di Cloud Tasks su come impostare i parametri di ripetizione.

Eliminazione di attività da una coda

Quando elimini un'attività, devi attendere 9 giorni prima di crearne una con lo stesso nome se l'attività si trovava in una coda creata utilizzando un file queue.yaml, oppure 1 ora se l'attività si trovava in una coda creata con Cloud Tasks.

L'esempio seguente elimina l'attività con ID attività foo dalla coda con ID coda queue1. Si tratta dell'equivalente in Cloud Tasks dell'eliminazione delle attività nelle code di attività.

gcloud

Il progetto e la posizione dell'attività vengono dedotti dal progetto predefinito della CLI gcloud.

gcloud tasks delete foo --queue=queue1

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

task_path = client.task_path(project, location, queue, "foo")
response = client.delete_task(name=task_path)

Per saperne di più, leggi la documentazione di riferimento di Cloud Tasks L'eliminazione di un'attività da un .

Pulizia delle attività

L'esempio seguente elimina definitivamente tutte le attività dalla coda con ID coda queue1 . Si tratta dell'equivalente in Cloud Tasks della pulizia delle attività nelle code di attività.

gcloud

Il progetto e la località della coda vengono dedotti dall'interfaccia predefinita di gcloud CLI progetto.

gcloud tasks queues purge 

queue1

libreria client

client = tasks.CloudTasksClient()

# TODO(developer): Uncomment these lines and replace with your values.
# project = 'my-project-id'
# location = 'us- central1'
# queue = 'queue1'

queue_path = client.queue_path(project, location, queue)
response = client.purge_queue(name=queue_path)

Per saperne di più, leggi la documentazione di riferimento di Cloud Tasks Espandere tutte le attività da una coda.

Passaggi successivi