MSMQ线程安全吗?

时间:2008-10-22 06:05:12

标签: multithreading msmq

我有多个进程监视MSMQ队列。我想做多步操作,比如先查看消息,然后根据一些标准接收消息。单个消息可以传递多个进​​程的接收标准,以便多个进程可以尝试接收相同的消息。这些操作是否是线程安全的?如果不是,我应该怎么做才能防止一个进程无法收到其他进程已收到的消息?

3 个答案:

答案 0 :(得分:14)

根据MSDN

  

只有以下方法是线程安全的:BeginPeek,BeginReceive,EndPeek(IAsyncResult),EndReceive(IAsyncResult),GetAllMessages,Peek和Receive。

答案 1 :(得分:6)

您可能对我就此主题撰写的blog entry感兴趣。

简而言之,MSMQ C ++ API是线程安全的,但并非所有System.Messaging方法都是线程安全的。在博客文章中,我将讨论如何以线程安全的方式调用MessageQueue.Send。

答案 2 :(得分:5)

操作本身是线程安全的。但是,如果执行多步操作,您可能会发现结果不一致(例如,查看数据是否在队列中,然后调用以接收数据,仅发现它不再存在)。