Le migliori pratiche per ritardare i lavori

3

Ho un sistema in PHP che funziona come un sistema di prenotazione. Una volta che la prenotazione è confermata ci sono un totale di 7 email / sms che devono essere inviati. I tempi di quando devono essere inviati sono già noti.

Ad esempio, 24 ore prima della data di prenotazione, una email si spegne.

In questo momento abbiamo un cron che controlla se è 24h < e l'e-mail 24 ore non è ancora uscito, spara un lavoro in coda e il lavoro tenta di inviare l'e-mail, se fallisce riprova ecc ..

Come posso ottenere un controllo migliore sulle mie notifiche e poter disattivare una singola notifica o modificare il contenuto della notifica per quella singola prenotazione? Sto usando un sistema di job-worker che invia le notifiche, posso solo inviarle in coda, quando sono pronte per essere inviate.

Stavo pensando di creare una tabella di db chiamata planned_notifications con tutto il contenuto, un riferimento a booking_id e una colonna send_after

Posso quindi rimuovere una riga in questa tabella se non desidero che la notifica venga inviata, oppure posso modificare il contenuto in questa tabella per modificare il contenuto della notifica

Un cron è sul posto per prendere le righe dalla tabella planned_notification nel sistema delle code.

Probabilmente non sono il primo con questo problema e sto cercando di ottenere alcune informazioni sulle "migliori pratiche" per questo tipo di problema

    
posta Mazzy 07.09.2016 - 14:10
fonte

1 risposta

4

Le due principali preoccupazioni qui nel design di alto livello sono essenzialmente la messaggistica da uno o più componenti software ad altri componenti software e la programmazione flessibile dei lavori in base all'età di un evento messaggio.

Alcune importanti considerazioni da fare qui sono che non si vuole mescolare ciò che la messaggistica MQ fornisce al proprio sistema con eventi di pianificazione o time sensitive. Quindi come iniziare?

Crea un diagramma componente

Questo ti aiuterà a visualizzare e realizzare i vari componenti software indipendenti in gioco nel tuo sistema. Tenendo presente che i componenti devono essere accoppiati liberamente tra loro e indipendentemente testabili, si dovrebbe essere in grado di identificare quali componenti appartengono. Non dovrebbero assumere più responsabilità nel sistema di quanto necessario.

Per esempio, una prenotazione? il componente dovrebbe avere la responsabilità di creare e aggiornare planned_notifications , tuttavia sta assumendo troppe responsabilità anche inviando notifiche e possedendo la logica di business di quando è opportuno inviare.

Interazioni componente

Quando decidi di MQ Messaging, rendi conto che è la colla che legherà insieme i tuoi componenti. Nel tuo diagramma puoi connettere vari componenti con Interazioni , in questo caso al componente SMS / Email può essere inviato un messaggio che contiene i dettagli del messaggio da inviare, ma è importante per il componente SMS / Email non contenere la logica di business per determinare quando inviare un messaggio.

Sembra che i tuoi pensieri siano già corretti qui. Non si dovrebbe usare MQ per la persistenza dei dati. La necessità di un tavolo è importante.

Design di alto livello

Se stavo progettando questo sistema con questa informazione limitata in anticipo. Creerei un componente di prenotazione che pianifica le notifiche pianificate in una tabella. Il componente Scheduler conterrà un processo che si attiva a intervalli regolari e identifica le notifiche da inviare, quindi formule i messaggi MQ con i dettagli per i messaggi da inviare a una coda. Un componente di notifica leggerà dalla coda e sarà responsabile per l'invio della notifica.

Oltre a questo, alcune cose importanti da considerare sono la gestione delle eccezioni corretta. Qualsiasi numero di cose può andare storto quando si invia un SMS o una e-mail, quindi si può prendere in considerazione una coda di conferma che il componente Notification può fornire in modo asincrono un messaggio di aggiornamento Success o Failure. Un altro componente software potrebbe voler leggere questi messaggi di riconoscimento e aggiornare il database o i registri di conseguenza.

    
risposta data 07.09.2016 - 15:46
fonte

Leggi altre domande sui tag