Ho un servizio Windows scritto in C# che legge da MSMQ e basato sul tipo di messaggio che assegna ad agenti che elaborano quel messaggio in un thread di lavoro. L'applicazione si avvia senza agenti e vengono creati in modo dinamico in fase di esecuzione, come i messaggi arrivano nella MSMQProblema di progettazione dell'elaborazione simultanea MSMQ
Ecco una figura di base di come funziona:
Se il thread di lavoro agente è occupato a fare il lavoro il messaggio viene accodato alla sua coda locale. Fin qui tutto bene. Ma se per qualche motivo se il servizio viene interrotto, il contenuto della coda locale viene perso.
Sto cercando di capire quale potrebbe essere il modo migliore per gestire questo scenario. Al momento le code locali sono System.Concurrent.ConcurrentQueue
. Potrei probabilmente usare un db Sql Ce o qualche altra memoria persistente, ma sono preoccupato per le prestazioni. L'altra cosa nella mia mente è leggere da MSMQ solo quando gli agenti sono pronti per elaborare il messaggio, ma il problema è che non conosco il messaggio che MSMQ conterrà.
Quali possibili approcci posso affrontare in merito a questo problema?
Mi piacerebbe usare Redis qui, ma non pensi che sarebbe eccessivo? – Obaid
Niente affatto. È estremamente leggero e fa ciò che è stato progettato per bene, quindi invece di preparare e debug di qualcosa di nuovo tutto da solo, puoi usare qualcosa che possa fare il lavoro per te. In alternativa, è possibile utilizzare i file mappati in memoria per ottenere un accesso rapido a qualche tipo di archiviazione permanente, ma ci sono alcune complicazioni e non conosco la sicurezza dei thread ... –