Ho un processo php producer-a
che colloca un lavoro su RabbitMQ a
- rimandando l'elaborazione a un servizio di terze parti. Il servizio di terze parti completa l'elaborazione di a
e inserisce una risposta sulla coda b
. Ho un listener consumer-b
che preleva i lavori in coda b
per continuare l'elaborazione.
Devo assicurarmi che producer-a
abbia completato il processo completamente prima che il listener consumer-b
prenda il lavoro per continuare l'elaborazione.
Il problema che sto affrontando è che usando RMQ - sto eseguendo operazioni in modo asincrono - tuttavia ho bisogno di serializzare questo processo usando ancora RMQ.
Nel caso in cui quanto sopra non ha senso:
Esempio di timeline se serializzato:
Process A ------> Process B ------> Process C
Esempio di timeline con coda messaggi
Internal Process Process A----------------------------------|
Deferred Process Process B -----|
Internal Process |Process C---|
Il processo A deve essere completato completamente prima del processo C. Il problema è che il processo B viene posticipato a un servizio di terze parti tramite una coda di messaggi e devo garantire che il processo A che ha inviato il processo al processo B sia stato completato prima del processo C riprende il lavoro dal processo A. Come si può vedere dalla timeline precedente, il processo C è stato completato prima del completamento del processo A.
Aggiornamento:
Non pensavo di affermare l'ovvio, ma sembra che stia ricevendo suggerimenti / soluzioni ovvi. producer-a
deve semplicemente inviare un messaggio TCP a Loggly (a volte richiede più di 2 secondi) e deve anche aggiornare il database per avvisare che il processo è stato rinviato. A volte, il messaggio ritorna e viene raccolto da Process C prima che il processo A sia completato.