Questa pagina descrive come creare un gestore di attività, il codice che gestisce un'attività push. Devi fornire un gestore di richieste per elaborare l'attività. Il mapping dall'
URL della richiesta al gestore appropriato viene dichiarato in
app.yaml
del servizio, proprio
come qualsiasi altro gestore di richieste. Poiché controlli la modalità di mapping delle richieste di attività a un gestore, puoi organizzare i gestori di attività. Se l'applicazione elabora molti tipi diversi di attività, puoi aggiungere tutti i gestori a un singolo servizio oppure distribuirli tra più servizi.
Scrivere un gestore di richieste di attività push
Nella coda, il servizio Coda attività crea un'intestazione HTTP e la invia a un'istanza del servizio worker specificata dalla destinazione dell'attività. Le richieste di Coda attività vengono inviate dall'indirizzo IP 0.1.0.2.
Se il gestore si trova in un servizio separato, non è necessario scriverlo nella stessa lingua in cui è stata creata e inserita nella coda l'attività.
Quando scrivi il gestore, segui queste linee guida:
Il codice deve restituire un codice di stato HTTP compreso nell'intervallo 200-299 per indicare la riuscita. Qualsiasi altro codice indica che l'attività non è riuscita.
Le attività push hanno una scadenza di completamentofissa che dipende dal tipo di scalabilità del servizio che le esegue. I servizi di scalabilità automatica devono essere completati prima che siano trascorsi 10 minuti. I servizi di scalabilità manuale e di base possono essere eseguiti fino a 24 ore. Se il gestore non rispetta la scadenza, il servizio Coda attività presuppone che l'attività non sia riuscita e riproverà.
Quando il tempo di esecuzione di un'attività si avvicina alla scadenza, App Engine genera un'
DeadlineExceededError(dal modulogoogle.appengine.runtime) prima che venga raggiunta la scadenza, in modo che tu possa salvare il tuo lavoro o registrare i progressi compiuti.Il gestore deve essere idempotente. L'API Coda attività di App Engine è progettata per fornire la consegna "almeno una volta", ovvero se un'attività viene aggiunta correttamente, App Engine la consegnerà a un gestore almeno una volta. Tieni presente che in alcune rare circostanze è possibile eseguire più attività, quindi il codice deve garantire che non ci siano effetti collaterali dannosi dell'esecuzione ripetuta.
Coda attività utilizza il codice HTTP nella risposta del gestore per determinare se l'attività è riuscita. La risposta del gestore viene visualizzata solo dal servizio Coda attività e solo per determinare se l'attività è riuscita. La coda ignora tutti gli altri campi della risposta. Il servizio elimina quindi la risposta. L'app di origine non riceve mai nessuno dei dati. Se un'attività non riesce, il servizio Coda attività riprova a eseguirla inviando un'altra richiesta.
I dati forniti dall'utente possono essere inviati al gestore nella richiesta come stringa di query o come payload nel corpo della richiesta. L'inserimento dei dati utente è descritto in Creare attività. Se la richiesta include dati, il gestore deve sapere come sono stati inseriti nella richiesta. Il codice esatto che utilizzi per recuperare i dati dalla richiesta dipende dal framework web specifico che stai utilizzando.
Per testare un gestore di attività, accedi come amministratore e visita l'URL del gestore nel browser.
Leggere le intestazioni delle richieste
Una richiesta HTTP di attività push ha intestazioni speciali impostate da App Engine, che contengono informazioni specifiche dell'attività che il gestore può utilizzare.
Se queste intestazioni sono presenti in una richiesta di un utente esterno alla tua app, vengono rimosse e sostituite. L'unica eccezione riguarda le richieste degli amministratori che hanno eseguito l'accesso all'applicazione, che sono autorizzati a impostare le intestazioni a scopo di test. D'altra parte, le intestazioni non vengono rimosse quando l'app è in esecuzione nel server di sviluppo.
Le richieste di Coda attività conterranno sempre le seguenti intestazioni:
| Intestazione | Descrizione |
|---|---|
X-Appengine-QueueName |
Il nome della coda (possibilmente "default" 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 volte in cui è stato eseguito un nuovo tentativo 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 |
L'ora di esecuzione di destinazione dell'attività, specificata in secondi dal 1° gennaio 1970. |
Se il gestore di richieste trova una delle intestazioni elencate sopra, può essere certo che la richiesta sia una richiesta di Coda attività.
Inoltre, le richieste di Coda attività possono contenere le seguenti intestazioni:
| Intestazione | Descrizione |
|---|---|
X-Appengine-TaskPreviousResponse |
Il codice di risposta HTTP del tentativo precedente. |
X-Appengine-TaskRetryReason |
Il motivo per cui è stato eseguito un nuovo tentativo per l'attività. |
X-Appengine-FailFast |
Indica che un'attività in esecuzione non riesce immediatamente se non è disponibile un'istanza esistente. |
Proteggere gli URL dei gestori di attività
Se un'attività esegue operazioni sensibili (ad esempio la modifica dei dati), potresti voler proteggere l'URL del gestore per impedire a un utente esterno malintenzionato di chiamarlo direttamente. Puoi impedire agli utenti di accedere agli URL delle attività limitando l'accesso a amministratori di App Engine. Le richieste di attività vengono emesse da App Engine e possono sempre avere come target un URL con limitazioni.
Puoi limitare un URL aggiungendo l'
login: admin
elemento 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à.