Creazione dei gestori di attività

In questa pagina viene descritto come creare un gestore di attività, ovvero il codice che gestisce un push dell'attività. Devi fornire un gestore delle richieste per elaborare l'attività. Il mapping da l'URL della richiesta al gestore appropriato è dichiarato nel tag app.yaml del tuo servizio, come qualsiasi altro gestore di richieste. Poiché sei tu a controllare come mappare le richieste delle attività 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 un solo servizio oppure puoi distribuirli tra più servizi.

Scrittura di un gestore delle richieste di attività push

Nella coda, il servizio Task Queue crea un'intestazione HTTP e la invia a un dell'istanza del servizio worker specificato dalla destinazione dell'attività. Le richieste di Task Queue vengono inviate dall'indirizzo IP 0.1.0.2.

Non è necessario che il tuo gestore sia scritto nella stessa lingua usata ha accodato l'attività se il gestore si trova in una servizio separato.

Quando scrivi il gestore, segui queste linee guida:

  • Il codice deve restituire un codice di stato HTTP compreso tra 200 e 299 e è un indicatore di successo. Qualsiasi altro codice indica che l'attività non è riuscita.

  • Le attività push hanno un completamento fisso scadenza dipende dal tipo di scalabilità del servizio che li esegue. I servizi di scalabilità automatica devono essere completati 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 tuo gestore non rispetta la scadenza, il servizio Coda di attività presuppone che l'attività non sia riuscita e un nuovo tentativo di esecuzione.

  • Il gestore deve essere idempotente. L'API Task Queue di App Engine è progettata per fornire "almeno una volta" la distribuzione dei dati; ovvero, se un'attività viene aggiunta correttamente, App Engine fornisce a un gestore, almeno una volta. Tieni presente che, in alcune rare circostanze, l'esecuzione di più attività possibile l'esecuzione, il codice deve assicurarsi che non siano effetti collaterali di un'esecuzione ripetuta.

La coda di attività utilizza il codice HTTP nella risposta del gestore per determinare se dell'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 nella risposta. Il servizio ignora quindi la risposta. L'app di origine non ha mai riceve tutti i dati. Se un'attività non riesce, il servizio Coda di attività proverà nuovamente a inviando un'altra richiesta.

I dati forniti dall'utente possono essere inviati all'handler 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 è stato inserito nella richiesta. Il codice esatto utilizzato per recuperare i dati dalla richiesta dipende dal particolare framework web in uso.

Per testare un gestore di attività, accedi come amministratore e visita l'URL del gestore nel tuo browser.

Intestazioni delle richieste di lettura

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 sono le richieste da parte di amministratori che hanno eseguito l'accesso. dell'applicazione, autorizzati a impostare intestazioni a scopo di test. D'altra parte, le intestazioni non vengono rimossi quando l'app è in esecuzione nel server di sviluppo.

Le richieste della coda di attività contengono sempre le seguenti intestazioni:

Intestazione 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 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 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 è una richiesta di coda di attività.

Inoltre, le richieste della coda di 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 hai eseguito di nuovo l'attività.
X-Appengine-FailFast Indica che un'attività in esecuzione non va a buon fine immediatamente se non è disponibile un'istanza esistente.

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 stesse richieste di attività emesse da App Engine e possono sempre scegliere come target un URL con restrizioni.

Puoi limitare un URL aggiungendo l'elemento login: admin alla configurazione dell'handler nel file app.yaml.

Ad esempio:

runtime: php55
api_version: 1
threadsafe: true

handlers:
- url: /tasks/process
  script: process.php
  login: admin

Passaggi successivi