Pianificazione delle attività con Cron per Java 8 (basata sulla CLI gcloud)

Il servizio cron di App Engine ti consente di configurare attività programmate ricorrenti eseguite in orari specifici o a intervalli regolari. Queste attività sono comunemente chiamate cron job. Questi cron job vengono attivati automaticamente dal servizio cron di App Engine. Ad esempio, potresti utilizzare un cron job per inviare di fornire un report inviato per email con cadenza giornaliera o di aggiornare alcuni dati memorizzati nella cache ogni 10 minuti o aggiorna le informazioni di riepilogo una volta all'ora.

Un cron job esegue una richiesta HTTP GET pianificata all'endpoint specificato nella nella stessa app in cui è configurato il cron job. Il gestore dell'endpoint esegue la logica quando viene chiamato.

Il servizio Cron di App Engine non può essere utilizzato per chiamare endpoint web esterni all'app host di App Engine. Non può essere utilizzato per chiamare endpoint di App Engine da altre app oltre all'app host.

Una richiesta cron job è soggetta agli stessi limiti previsti per le code di attività push.

Prima di iniziare

Per eseguire il deployment o aggiornare le pianificazioni, il tuo account richiede uno dei seguenti requisiti Ruoli IAM:

  • Proprietario
  • Editor

Puoi impostare l'autorizzazione nella Pagina IAM nella console Google Cloud.

Creazione di un cron job

  1. Crea il file cron.yaml nella directory principale della tua applicazione (insieme a app.yaml).
  2. Aggiungi una o più voci <cron> al file e definisci gli elementi necessari per il job, inclusi gli elementi <url> e <schedule> obbligatori. Esamina la sintassi e le opzioni di cron.yaml per ulteriori dettagli sugli elementi del file cron.yaml.

    L'esempio seguente crea un cron job di base che viene eseguito ogni giorno:

    cron:
    - description: "daily summary job"
      url: /tasks/summary
      target: beta
      schedule: every 24 hours
    

    La specifica di destinazione è facoltativa ed è il nome di un servizio o di una versione. Se presente, il target viene anteposto al nome host dell'app, in modo che il job venga indirizzato a quel servizio/a quella versione. Se non viene specificato alcun target, il job verrà eseguito nelle versioni del default servizio configurate per il traffico.

  3. Crea un gestore per l'URL del cron job. L'handler deve eseguire tutte le attività che vuoi pianificare. Il gestore deve rispondere con un codice di stato HTTP tra 200 e 299 (inclusi) per indicare il successo. Altri codici di stato possono e può essere utilizzato per riprova il cron job.

Il gestore può essere semplice come un Servlet nell'app. URL Servlet il mapping in web.xml deve essere lo stesso dell'URL del cron job.

Testare i cron job nel server di sviluppo

Il server di sviluppo locale non esegue automaticamente i cron job. Puoi effettuare richieste direttamente all'URL del cron job per testare la funzionalità. Puoi utilizzare l'interfaccia di cron o delle attività pianificate locale per attivare gli URL dei tuoi job con curl o uno strumento simile.

Nuovi cron job non riusciti

Se il gestore di richieste di un cron job restituisce un codice di stato non compreso nell'intervallo 200-299 (inclusi) App Engine considera il job come non riuscito. Per impostazione predefinita, i job non riusciti non vengono ritentati a meno che non venga restituito un codice di stato 503, nel qual caso viene ripetuto ogni minuto fino a quando non riesce o restituisce un codice di stato 200-299.

Per impostare i job non riusciti in modo che vengano riprovati:

  1. Includi un blocco retry_parameters nel file cron.yaml.
  2. Scegli e imposta il parametro riprova parametri nel Blocco retry_parameters.

    Ad esempio, questo file cron.yaml di esempio contiene un singolo job cron configurato per riprovare fino a cinque volte (il valore predefinito) con un intervallo di attesa iniziale di 2,5 secondi che raddoppia ogni volta.

    cron:
    - description: "retry demo"
      url: /retry
      schedule: every 10 mins
      retry_parameters:
        min_backoff_seconds: 2.5
        max_doublings: 5
    

Scopri di più sulle opzioni di ripetizione di cron.

Deployment di cron job

Per eseguire il deployment dei job cron specificati nel file di configurazione cron.yaml, esegui il seguente comando:

gcloud

gcloud app deploy cron.yaml

Maven

mvn appengine:deployCron cron.yaml

Gradle

gradle appengineDeployCron cron.yaml

IDE

Se utilizzi IntelliJ o Eclipse, seleziona i singoli file di configurazione da eseguire il deployment utilizzando il modulo di deployment.

Eliminazione di tutti i cron job

Per eliminare tutti i cron job:

  1. Modifica i contenuti dei campi cron.yaml file in:

    cron:
    
  2. Esegui il deployment del file cron.yaml in App Engine.

Protezione degli URL per cron

Un gestore cron è solo un normale gestore definito in app.yaml. Puoi impedire agli utenti di accedere agli URL utilizzati dalle attività pianificate limitando l'accesso a Google Workspace for Education. Le attività pianificate possono accedere agli URL riservati agli amministratori. Puoi limita un URL aggiungendo login: admin alla configurazione del gestore in app.yaml.

Un esempio potrebbe essere il seguente in app.yaml:

application: hello-cron
version: 1
runtime: java
api_version: 1

handlers:
- url: /report/weekly
  servlet: mysite.server.CronServlet
  login: admin

Per testare un job cron, accedi come amministratore e visita l'URL dell'handler nel browser.

Le richieste del servizio Cron conterranno anche un'intestazione HTTP:

X-Appengine-Cron: true

L'intestazione X-Appengine-Cron viene impostata internamente da App Engine. Se il gestore delle richieste trova questa intestazione, può considerare attendibile che la richiesta sia una richiesta di cron. Se l'intestazione è presente in una richiesta di un utente esterno alla tua app, viene rimossa, ad eccezione delle richieste degli amministratori dell'applicazione che hanno eseguito l'accesso, che sono autorizzati a impostare l'intestazione a fini di test.

App Engine invia richieste Cron dall'indirizzo IP0.1.0.2. Per i cron job creati con versioni precedenti di gcloud (precedente alla 326.0.0), le richieste di Cron provengono da 0.1.0.1.

Chiamate a Google Cloud Endpoints

Non puoi specificare un endpoint Google Cloud in il campo url di un cron job. Se vuoi che il tuo cron job chiami un endpoint Google Cloud, inviare una richiesta a una destinazione pubblicata da un gestore la tua app e chiama la classe e il metodo dell'endpoint dal codice gestore.

Visualizzazione dei cron job nella console Google Cloud

Puoi visualizzare i cron job pianificati in I cron job di App Engine di Cloud Scheduler .

Puoi anche visualizzare i log per vedere quando sono stati aggiunti o rimossi i cron job.

Scopri di più

Consulta le informazioni dettagliate sulla definizione dei cron job nel file cron.yaml Riferimento.