La domanda generale è che tipo di meccanismo posso utilizzare per trasferire dati da e verso editori e abbonati in cui gli editori o gli abbonati possono essere permanentemente offline? Le code dei messaggi possono essere usate per questo?
Possibile approccio
Sto pensando a un approccio in stile coda di messaggi in cui il servizio online (publisher) pubblica i messaggi su una coda online, copia la coda offline e dispone del servizio offline (sottoscrittore), quindi elabora tutti i messaggi in arrivo. Devo progettare una soluzione in cui lo stesso vale per i ruoli invertiti, in cui il servizio offline è l'editore e il servizio online è l'abbonato
I dati vengono fisicamente trasportati tra le reti tramite supporto di memorizzazione. Una volta che il supporto di memorizzazione è collegato a una rete, un servizio di trasferimento dati legge il supporto di memorizzazione e sposta tutti i dati dal supporto di memorizzazione alle code.
Approccio attuale
Il modo in cui attualmente lo faccio è una semplice copia della tabella dove
- Il database ha trigger che ascoltano inserimenti, aggiornamenti o eliminazioni, prende nota dell'evento in una tabella degli eventi del database (db_publish_events)
- Successivamente un servizio di trasferimento dati legge tutti gli eventi pubblicati da db_publish_events e quindi copia l'intera riga in un file JSON con un tag INSERT, UPDATE o DELETE
- Quindi il file JSON viene trasportato manualmente nel sistema di sottoscrizione e quindi elaborato da un servizio di trasferimento dati. Ogni record trasferito in viene contrassegnato in una tabella di ricezione eventi del database (db_received_events).
- Un file JSON viene scaricato dal sottoscrittore delle ricevute di riconoscimento di tutti gli eventi ricevuti dal sottoscrittore.
- Il file JSON con le ricevute viene rinviato al database di pubblicazione originale e cambia lo stato di db_publish_event per contrassegnarlo come ricevuto in modo che il publisher interrompa l'invio.
Pro
Copia della tabella semplice su una rete
Contro
Nessuna integrità dei dati su tabelle o limiti di eventi aziendali poiché un record viene trasferito alla volta.
Soluzione
Penso a una soluzione in cui l'intero evento viene trasferito come un unico messaggio, quindi prima che l'elaborazione complessa delle regole aziendali divida un evento in più tabelle.
Esiste un modo per software di messaggistica commerciale o open source (RabbitMQ) per eseguire una semplice copia USB dei messaggi per la pubblicazione in una coda offline?