Ecco il mio scenario esatto.
- Devo inoltrare richieste a un servizio di terze parti
- Il servizio impiega circa 15 secondi per rispondere
- Non ha nemmeno webhook o meccanismi di richiamata
- Queste richieste non vengono fatte costantemente durante il giorno, ma a pezzi
- Le richieste al servizio di terze parti sono fatte da un consumatore che sta prelevando da una coda
- utilizzando impl & default default di transito di massa RabbitMQ
- Tutti i messaggi generati dal prodotto sono attualmente messi in una coda. La stessa coda con le chiamate al servizio di terze parti
- Ci sono attualmente 3 consumatori, con 4 thread di lavoro ciascuno per un totale di 12 thread di lavoro. Questo è il numero massimo corrente di messaggi simultanei che possono essere gestiti contemporaneamente
- Durante il giorno la coda dei messaggi riceverà ~ 100 di questi messaggi che eseguiranno il backup della coda. Tutti i 12 thread di lavoro elaboreranno le chiamate ~ 15s e la coda inizierà il backup. Ciò si traduce in perdita estrema di funzionalità. E-mail ritardate, ecc. Normalmente continua a far crescere la coda per ~ 30 minuti finché non raggiunge
- In questo caso, i consumatori utilizzano la CPU allo 0% perché sono tutti in attesa di thread.
La domanda che ho è come impostare la coda dei messaggi e gli utenti in modo che non eseguano il backup. Sto cercando di evitare la perdita di funzionalità del sito per quei blocchi di 30 minuti. Tutto va bene.
Recap:
- 1 coda
- ~ attività di 15 secondi in esecuzione a 0% cpu
- 12 thread di lavoro dei consumatori
- La coda esegue il backup e impiega circa 30 minuti per raggiungere
- utilizzando impl & default default di transito di massa RabbitMQ