Metodi per mantenere aggiornato un servizio esterno che esegue periodicamente il polling del tuo servizio?

0

Scusa se il titolo è difficile da capire, è più facile se descrivo lo scenario per far passare la domanda.

Ho un servizio che raccoglie dati, esegue la logica di business e fa tutte le cose normali. Ora devo eseguire un'integrazione che fornirà un set di dati (per gli account sage) tramite un endpoint ( http://example.net/import-feed ).

Questo endpoint può essere interrogato dal servizio esterno in qualsiasi momento per estrarre le ultime modifiche.

Quando un dato viene aggiornato, pronuncia un pagamento o una data che è necessario aggiungere al feed.

Il pagamento o la data potrebbero essere modificati più volte prima che il servizio venga sottoposto a polling.

La domanda è quali sono i metodi migliori per tenere traccia di tutti o ultima modifica (probabilmente la migliore) fatta per il record / riga / dati e tirare tutti questi cambiamenti nel feed. Il servizio esterno invierà quindi le notifiche al mio servizio facendomi sapere se aggiungere quell'aggiornamento ha avuto successo o meno.

Attualmente l'unico metodo che posso pensare è tenere traccia dell'ultima ora modificata e dell'ultima volta che è stata importata, e uno stato che dice se deve essere importato / aggiornato. Queste importazioni / aggiornamenti verrebbero quindi estratte dal feed.

Spero che tu capisca il problema, ho avuto difficoltà a cercare informazioni su questo tipo di integrazione. Potrebbe essere che io non stia usando i termini corretti.

Quindi, quali sono i metodi per questo?

    
posta SamV 21.02.2014 - 01:04
fonte

2 risposte

1

Il metodo che hai suggerito di utilizzare un timestamp dell'ultima modifica dovrebbe funzionare correttamente. Se è necessario archiviare dati specifici per il servizio esterno, ad esempio per tenere traccia del fatto che il servizio abbia scaricato tali informazioni, allora potrebbe essere opportuno memorizzare queste meta informazioni in una tabella separata, ad esempio:

sage_queue

id | tabella | table_id | modified_at

In questo modo, quando viene chiamato l'endpoint di Sage, dovrebbe essere una procedura abbastanza semplice da eseguire attraverso questa tabella e raccogliere tutti i dati associati dalle tabelle principali.

Quando il tuo endpoint riceve conferma che una determinata voce è stata elaborata, potrebbe essere semplicemente cancellata dalla tabella.

Quando un record viene aggiornato in una delle tabelle principali, viene inserito come riferimento nella tabella sage_queue (attivata da un sistema listener di eventi o da un cron job periodico). Se esiste già un riferimento a quel record, puoi semplicemente aggiornare il campo modified_at.

    
risposta data 21.02.2014 - 11:16
fonte
1

Mi sembra che tu abbia un problema che potrebbe essere adatto alla sequenza di segregazione delle responsabilità di Query sui comandi CQRS.
In sostanza non vorresti pensare al tuo codice che memorizza una singola voce e aggiorna costantemente quella voce, ma piuttosto, usando una coda di messaggi per memorizzare tutte le istruzioni di aggiunta / modifica in modo da poter far avanzare o retrocedere i dati in qualsiasi momento. .

Periodicamente (il tuo intervallo di polling / scheduling) dovresti semplicemente spingere tutti i dati dalla coda First in First Out e poi solo spuntare i record più vecchi dalla coda.

Ho il sospetto che potrebbe essere necessario gestire il modo in cui identificate ogni voce dal vostro sistema alle API di SAGE Accounting usando questo approccio, ma penso che questo sia un approccio molto più sicuro in quanto fornisce una pista di controllo.

    
risposta data 21.02.2014 - 12:34
fonte

Leggi altre domande sui tag