Come implementare le notifiche per gli articoli in scadenza?

2

Sto lavorando su un'applicazione web Java / Spring. L'applicazione rilascia licenze su richiesta. Ogni licenza ha una data di scadenza. Le licenze possono essere rinnovate dall'amministratore. Voglio inviare una notifica via email o eseguire alcune operazioni 90, 45, 30, x, y, z no. giorni prima della scadenza della licenza. La notifica e-mail da inviare esattamente prima del numero di giorni (non richiesto per essere precisi ai minuti) è un obbligo contrattuale e deve essere inviato fino a quando la licenza non viene rinnovata.

Sto pensando di seguire i modi per implementarlo.

  • Implementa uno Spring Scheduler che viene eseguito una volta al giorno e controlla la scadenza delle licenze dopo il giorno corrente + x giorni e invia una notifica via email. Tuttavia, sono preoccupato che il lavoro non funzioni in un giorno specifico come la manutenzione delle applicazioni, ecc. Ad esempio, l'e-mail del 45 ° giorno può essere persa poiché il lavoro non è stato eseguito il 45 ° giorno. Sembra un errore incline. Per evitare ciò, impostare le colonne 90, 45, 30, x, y, z in un'altra tabella rispetto a ciascuna licenza, ma per il secondo rinnovo, questo sarà un problema. Per evitare ciò, tieni traccia dei giorni in cui viene eseguito lo scheduler, quindi se lo scheduler non viene eseguito in qualsiasi giorno o non viene completato correttamente, rieseguilo manualmente.

Questa è un'app Web stateless che esegue più istanze. Devo implementare questo tipo di operazioni come un lavoro batch separato o all'interno dell'applicazione web come schedulatore?

Apprezzerà qualsiasi idea o suggerimento sulle risorse.

    
posta TechCrunch 26.09.2016 - 00:28
fonte

2 risposte

1

Abbiamo implementato un comportamento simile con i messaggi ritardati RabbitMQ.

L'unica cosa che dovevi assicurarti che funzionasse era il routing dei messaggi, perché se un messaggio ritardato non poteva essere indirizzato al momento programmato sarebbe stato scartato (come da AMQP).

A parte il fatto che l'implementazione è davvero semplice e intuitiva, puoi impostare una coppia di publisher e di consumatori esattamente come faresti quando usi i normali messaggi RabbitMQ.

Nel tuo caso dovresti:

  1. prendi la data di scadenza di un articolo,
  2. sottrarre il numero di giorni in cui deve essere inviata una notifica per quell'elemento specifico,
  3. converti la data sottratta dal passo 2 al timestamp,
  4. sottrarre il timestamp della data corrente da tinestamp dal punto 3,
  5. utilizza la data / ora del passaggio 4 come numero di secondi per il ritardo.
risposta data 29.10.2016 - 16:53
fonte
0

Suggerisco di dare un'occhiata al programmatore Quartz piuttosto che perdere tempo a reinventare la ruota. Ho avuto un grande successo con la versione .Net di esso. link è per la versione Java.

    
risposta data 29.09.2016 - 14:23
fonte

Leggi altre domande sui tag