In questa pagina viene descritto come creare un gestore di attività, ovvero il codice che gestisce un'attività di push. Devi fornire un gestore delle richieste per elaborare l'attività. La mappatura dell'URL della richiesta al gestore appropriato viene dichiarata in app.yaml
del servizio, proprio come qualsiasi altro gestore di richieste. Poiché sei tu a controllare come mappare le richieste delle attività a un gestore, sei libero di organizzare i tuoi gestori delle attività. Se la tua applicazione
elabora molti tipi diversi di attività, puoi aggiungere tutti i gestori a un
singolo servizio oppure distribuirli tra più servizi.
Scrittura di un gestore di richieste di attività push
Nella coda, il servizio Coda di attività crea un'intestazione HTTP e la invia a un'istanza del servizio worker specificato dalla destinazione dell'attività. Le richieste di coda di attività vengono inviate dall'indirizzo IP 0.1.0.2
.
Non è necessario che il tuo gestore sia scritto nella stessa lingua che ha creato e in coda l'attività se si trova in un servizio separato.
Quando scrivi il gestore, segui queste linee guida:
Per indicare l'esito positivo, il codice deve restituire un codice di stato HTTP compreso tra 200 e 299. Qualsiasi altro codice indica che l'attività non è riuscita.
Le attività push hanno una scadenza di completamento fissa che dipende dal tipo di scalabilità del servizio che le esegue. I servizi di scalabilità automatica devono terminare prima che siano trascorsi 10 minuti. I servizi di scalabilità manuali e di base possono essere eseguiti per un massimo di 24 ore. Se il gestore non rispetta la scadenza, il servizio coda di attività presume che l'attività non sia riuscita e la riproverà.
Quando il tempo di esecuzione di un'attività si avvicina alla scadenza, App Engine genera un valore
DeadlineExceededError
(dal modulogoogle.appengine.runtime
) prima della scadenza, per consentirti di salvare il tuo lavoro o registrare qualsiasi avanzamento.Il gestore deve essere idempotente. L'API Task Queue di App Engine è progettata per fornire un recapito "almeno una volta"; in altre parole, se un'attività viene aggiunta correttamente, App Engine la consegna a un gestore almeno una volta. Tieni presente che in rari casi è possibile eseguire più attività, quindi il codice deve garantire che non ci siano effetti collaterali dannosi di un'esecuzione ripetuta.
L'esempio seguente mostra il recupero di un valore intero da una richiesta e l'aggiunta del valore a un contatore gestito in Cloud Datastore:
La mappatura dall'URL dell'attività /update-counter
alla classe
UpdateCounterHandler
viene eseguita all'interno di WSGIApplication
.
Il file worker.yaml
crea un servizio denominato "worker" a cui aggiunge il codice worker. Tieni presente che l'URL del gestore è sicuro
perché specifica login:admin
:
La coda di attività utilizza il codice HTTP nella risposta del gestore per determinare se l'attività è riuscita. La risposta del gestore è visibile solo al servizio Coda di attività e solo per determinare se l'attività è riuscita. La coda ignora tutti gli altri campi della risposta. Il servizio quindi ignora la risposta. L'app di origine non riceve mai nessuno dei dati. Se un'attività non riesce, il servizio Coda di attività riesegue l'attività inviando un'altra richiesta.
I dati forniti dall'utente possono essere consegnati al gestore nella richiesta come stringa di query o come payload nel corpo della richiesta. L'inserimento dei dati utente è descritto in Creazione di attività. Se la richiesta include dati, il gestore deve sapere come sono stati inseriti nella richiesta. Il codice esatto da utilizzare per recuperare i dati dalla richiesta dipende dal framework web specifico in uso.
Per testare un gestore di attività, accedi come amministratore e visita l'URL del gestore nel tuo browser.
Lettura delle intestazioni delle richieste
Una richiesta HTTP di un'attività di push ha intestazioni speciali impostate da App Engine, che contengono informazioni specifiche dell'attività che il gestore può utilizzare.
Se queste intestazioni sono presenti nella richiesta di un utente esterno alla tua app, vengono rimosse e sostituite. L'unica eccezione sono le richieste degli amministratori dell'applicazione che hanno eseguito l'accesso, a cui è consentito impostare intestazioni a scopo di test. Le intestazioni, invece, non vengono rimosse quando l'app è in esecuzione nel server di sviluppo.
Le richieste della coda di attività contengono sempre le seguenti intestazioni:
Titolo | Descrizione |
---|---|
X-Appengine-QueueName |
Il nome della coda (possibilmente "predefinita" per la coda in modalità push predefinita). |
X-Appengine-TaskName |
Il nome dell'attività o un ID univoco generato dal sistema se non è stato specificato alcun nome. |
X-Appengine-TaskRetryCount |
Il numero di nuovi tentativi per questa attività. Per il primo tentativo, questo valore è 0 . Questo numero include i tentativi in cui l'attività non è riuscita a causa della mancanza di istanze disponibili e non ha mai raggiunto la fase di esecuzione. |
X-Appengine-TaskExecutionCount |
Il numero di volte in cui questa attività non è riuscita in precedenza durante la fase di esecuzione. Questo numero non include gli errori dovuti alla mancanza di istanze disponibili. |
X-Appengine-TaskETA |
Il tempo di esecuzione target dell'attività, specificato in secondi dal 1° gennaio 1970. |
Se il tuo gestore di richieste trova una delle intestazioni sopra elencate, può considerare attendibile la richiesta in una coda di attività.
Inoltre, le richieste della coda di attività possono contenere le seguenti intestazioni:
Titolo | Descrizione |
---|---|
X-Appengine-TaskPreviousResponse |
Il codice di risposta HTTP del tentativo precedente. |
X-Appengine-TaskRetryReason |
Il motivo per cui hai eseguito di nuovo l'attività. |
X-Appengine-FailFast |
Indica che un'attività in esecuzione non riesce immediatamente se un'istanza esistente non è disponibile. |
Protezione degli URL dei gestori di attività
Se un'attività esegue operazioni sensibili (come la modifica dei dati), può essere opportuno proteggere l'URL del gestore per evitare che un utente esterno malintenzionato lo chiami direttamente. Puoi impedire agli utenti di accedere agli URL delle attività limitando l'accesso agli amministratori di App Engine. Le richieste delle attività sono emesse da App Engine e possono sempre scegliere come target un URL limitato.
Puoi limitare un URL aggiungendo l'elemento login: admin
alla configurazione del gestore nel file app.yaml
.
Ad esempio:
handlers:
- url: /your-task
script: worker.app
login: admin
Passaggi successivi
- Scopri come eliminare le attività