Domanda

Ho più processi che monitorano una coda MSMQ. Voglio fare operazioni in più passaggi come prima sbirciare il messaggio e poi in base ad alcuni criteri ricevere il messaggio. Un singolo messaggio può passare i criteri di ricezione di più processi in modo che più di un processo possa provare a ricevere lo stesso messaggio. Queste operazioni saranno thread-safe? In caso contrario, cosa devo fare per impedire a un processo di non ricevere il messaggio che l'altro processo ha già ricevuto?

È stato utile?

Soluzione

Le operazioni stesse sono thread-safe. Tuttavia, se si esegue un'operazione in più passaggi, è possibile che i risultati non siano coerenti (ad esempio, sbirciare per vedere se i dati sono in coda, quindi chiamare per ricevere i dati, solo per scoprire che non sono più lì).

Altri suggerimenti

Secondo MSDN :

  

Solo i seguenti metodi sono thread-safe: BeginPeek, BeginReceive, EndPeek (IAsyncResult), EndReceive (IAsyncResult), GetAllMessages, Peek e Receive.

Potresti essere interessato a un post di blog che ho scritto su questo argomento.

In breve, l'API MSMQ C ++ è thread-safe, ma non tutti i metodi System.Messaging sono thread-safe. Nel post del blog ho discusso su come chiamare MessageQueue. Invia in modo thread-safe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top