In questa pagina viene descritto come creare un gestore delle attività, il codice che gestisce un'attività push. Devi fornire un gestore delle richieste per elaborare l'attività. Il mapping dall'URL della richiesta al gestore appropriato è dichiarato nel web.xml
del tuo servizio, proprio come qualsiasi altro gestore di richieste. Poiché controlli la modalità di mappatura delle richieste di attività
a un gestore, puoi organizzare i 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
In coda, il servizio Task Queue crea un'intestazione HTTP e la invia a un'istanza del servizio worker specificata dalla destinazione dell'attività. Le richieste di code di attività
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 il gestore 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 fissa che dipende dal tipo di scalabilità del servizio su cui sono in esecuzione. I servizi di scalabilità automatica devono terminare prima che siano trascorsi 10 minuti. I servizi di scalabilità manuali e di base possono essere eseguiti fino a 24 ore. Se il gestore non rispetta la scadenza, il servizio coda di attività presuppone che l'attività non sia riuscita e riprova.
Quando il tempo di esecuzione di un'attività si avvicina alla scadenza, App Engine genera un
DeadlineExceededException
prima che venga raggiunta, per consentirti di salvare il lavoro o registrare qualsiasi avanzamento.Il gestore deve essere idempotente. L'API Task Queue di App Engine è progettata per fornire la consegna "almeno una volta"; ossia, se un'attività viene aggiunta correttamente, App Engine la consegna a un gestore almeno una volta. Tieni presente che, in alcune rare circostanze, è possibile eseguire più attività, quindi il codice deve garantire che l'esecuzione ripetuta non presenti effetti collaterali dannosi.
La coda di attività utilizza il codice HTTP nella risposta del gestore per determinare se l'attività è riuscita. La risposta del gestore viene visualizzata solo dal servizio Task Queue (coda di attività) e solo per determinare se l'attività è riuscita. La coda ignora tutti gli altri campi nella risposta. Quindi il servizio ignora la risposta. L'app di origine non riceve mai nessuno dei dati. Se un'attività non va a buon fine, il servizio coda di attività tenterà di 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 è stata inserita nella richiesta. Il codice esatto che utilizzi 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 browser.
Lettura delle intestazioni delle richieste
Una richiesta HTTP di un'attività push ha intestazioni speciali impostate da App Engine, che contengono informazioni specifiche sull'attività che il gestore può utilizzare.
Se sono presenti in una richiesta di un utente esterno alla tua app, queste intestazioni vengono rimosse e sostituite. L'unica eccezione riguarda le richieste degli amministratori dell'applicazione che hanno eseguito l'accesso, autorizzati a impostare intestazioni a scopo di test. Le intestazioni, invece, non vengono rimosse quando l'app è in esecuzione sul server di sviluppo.
Le richieste dalla coda di attività contengono sempre le seguenti intestazioni:
Titolo | Descrizione |
---|---|
X-Appengine-QueueName |
Il nome della coda (possibilmente "predefinito" 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 di 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 gestore delle richieste trova una delle intestazioni elencate sopra, può considerare attendibile che la richiesta sia una richiesta di 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 riprovato a eseguire 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 delle attività
Se un'attività esegue operazioni sensibili (ad esempio, la modifica dei dati), potrebbe essere opportuno proteggere l'URL del gestore per evitare che un utente esterno malintenzionato la chiami direttamente. Puoi impedire agli utenti di accedere agli URL delle attività limitando l'accesso agli amministratori App Engine. Le richieste di attività vengono emesse da App Engine e possono sempre avere come target un URL limitato.
Puoi trovare informazioni sulla limitazione degli URL in Sicurezza e autenticazione.
Un esempio che utilizzeresti in web.xml
per limitare tutto ciò che inizia con /tasks/
a solo amministratore è:
<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 web.xml
, consulta la documentazione relativa al descrittore di deployment.
Passaggi successivi
- Scopri come eliminare le attività