Ho sviluppato un servizio Windows con Message Broker (RabbitMQ)
Lo scopo del servizio è di ricevere dati tramite connessione TCP / UDP. Analizza i dati in arrivo in formato HEX e convertili in oggetti e salva l'oggetto nel database. Inoltre, il servizio esegue alcuni calcoli e controlla l'invio di avvisi / notifiche.
Il numero di dispositivi è di circa 3000 - 3500.
Il servizio è sviluppato in C #, Rabbit MQ, Entity Framework e SuperSocket.NET.
Inoltre ho implementato il caching per la lettura dei dati dal database.
Quindi questa è una panoramica dell'architettura.
Parte A -
1 - Our service receives the data over TCP/UDP.
2 - Parse the HEX string to objects and saves them to the database.
3 - Push the object to the Message Queue for further processing.
Parte B -
1 - Receives the object from Message Queue
2 - Performs a heavy calculation and saves to database
3 - Calculate events and send out email and sms alerts/notifications (dependent on Part B --> step 2)
Ora il problema è che poiché la Parte A elabora i dati così velocemente, la coda viene riempita con 200.000 record in 2 ore.
Ho provato a creare più code nella parte B per elaborare i record, ma la percentuale di messaggi in arrivo è ancora superiore a quella in uscita.
Ho bisogno di una guida su cosa fare, dato che ho esaurito le idee su come migliorare il servizio, in quanto questa è la seconda volta che ho rifatto l'intero servizio.