Sto provando a progettare un meccanismo di riproduzione che consentirà agli utenti di riprodurre i messaggi dalle code. Il miglior design Sono venuto per uno scambio che contiene più code e più consumatori è:Rabbitmq- Progettazione di un servizio di ripetizione di messaggi
creare un servizio registratore che verrà:
- Creare una coda e legare tutte le chiavi di routing ad esso .
- Consuma tutti i messaggi dallo scambio.
- Salva tutti i messaggi nel DB.
Richiesta di sottoscrizione per riproduzione.
- Ogni sottoscrittore crea un nuovo scambio, accoda e si lega ad esso con gli stessi collegamenti della coda normale.
- L'utente invia una richiesta di riposo a un server Web per avviare la riproduzione con un filtro (startdate, ecc.). La richiesta contiene il suo nome di scambio di ripetizione.
- Il server Web estrae i dati dal DB e li pubblica nello specifico scambio
- i perfezionamenti possono essere aggiunti come associare RequestId e riecheggiarlo.
Domande:
1. Ha senso?
2. Sto inventando la ruota? Esiste una soluzione inerente al coniglio? collegare?
3. La creazione di più scambi è considerata una buona pratica?
In questa soluzione viene creato uno scambio per ogni coda per pubblicare lo stesso messaggio.
Un'altra soluzione:
1. Creare una coda aggiuntiva "ReplayQueue" per ogni coda. imposta un TTL (diciamo un mese).
2. Ogni volta che un utente richiede un replay, gli consente di riprodurre dal proprio ReplayQueue senza acking.
Questa soluzione è un po 'problematica perché.
- Per poter riprodurre l'ultimo giorno, i consumatori dovranno recuperare tutti i 29 giorni precedenti e filtrarli.
- Questa soluzione è scalabile: le code diventeranno più grandi (a differenza dell'archiviazione db che può scalare).
L'intera questione sembra piuttosto opinione basata mentre senza requisiti specifici, è difficile rispondere a tutte le vostre sotto-domande. La tua app dovrebbe essere in tempo reale? Quale problema risolve la coda? Hai bisogno di code? Hai bisogno di accedere ai messaggi all'interno della coda (code ad accesso casuale)? – pinepain