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à. La mappatura dall'URL della richiesta al gestore appropriato è dichiarata in web.xml
del servizio, come qualsiasi altro gestore delle 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 a un singolo servizio o 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'istanza del servizio worker specificato dal target dell'attività. Le richieste di Task Queue vengono inviate dall'indirizzo IP 0.1.0.2
.
Il gestore non deve essere scritto nella stessa lingua in cui è stata creata e messa in coda l'attività se si trova in un servizio separato.
Quando scrivi il tuo 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 terminare prima che siano trascorsi 10 minuti. I servizi di scalabilità manuale 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.
Quando il tempo di esecuzione di un'attività si avvicina alla scadenza, App Engine genera
DeadlineExceededException
prima della scadenza, così puoi salvare il tuo lavoro o registrare qualsiasi progressi compiuti.L'handler 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 riceve mai 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 al gestore nella richiesta sotto forma di stringa di query o nel corpo della richiesta. L'inserimento dei dati utente è descritto in Creazione di attività. Se la richiesta include dati, il gestore deve sapere è stato inserito nella richiesta. Il codice esatto utilizzato per recuperare i dati da dipende dal framework web specifico che stai utilizzando.
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 e informazioni specifiche per l'attività che il gestore può utilizzare.
Se queste intestazioni sono presenti nella richiesta di un utente esterno alla tua app, vengono rimosse e sostituirli. L'unica eccezione riguarda le richieste degli amministratori dell'applicazione che hanno eseguito l'accesso e che sono autorizzati a impostare le intestazioni a scopo di test. D'altra parte, le intestazioni non vengono rimossi quando l'app è in esecuzione nel server di sviluppo.
Le richieste dalla coda di attività conterranno sempre le seguenti intestazioni:
Intestazione | Descrizione |
---|---|
X-Appengine-QueueName |
Il nome della coda (eventualmente "default" per la coda 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 è 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 riesce immediatamente se un'istanza esistente non è disponibile. |
Protezione degli URL dei gestori di attività
Se un'attività esegue operazioni sensibili (ad esempio la modifica dei dati), ti consigliamo di 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 generate da App Engine e possono sempre avere come target un URL con limitazioni.
Puoi scoprire di più sulla limitazione degli URL in Sicurezza e autenticazione.
Un esempio di ciò che puoi utilizzare in web.xml
per limitare tutto ciò che inizia con
/tasks/
solo agli amministratori è:
<security-constraint>
<web-resource-collection>
<web-resource-name>tasks</web-resource-name>
<url-pattern>/tasks/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
Per ulteriori informazioni sul formato di web.xml
, consulta la documentazione relativa al
descrittore del deployment.
Passaggi successivi
- Scopri come eliminare le attività