WCF服务的队列实现

问题描述

| 我需要有关WCF服务的队列设计的建议。 因此,我有一个wcf服务和很多客户。客户端生成消息并将它们放入队列以供我处理。 服务将它们异步处理,并且客户端在将消息放入队列时不需要回调或响应。 我的服务需要从队列中取出消息以进行多线程处理。但是,如果我的服务将停止或失败,或者服务器立即关闭-该服务必须重新处理消息,则不会进行处理。 因此,我考虑了msmq队列实现。 Msmq让我排好队,但是如何实现此要求:重新处理未处理到最后的消息? 也许有人会给我另一个更好的建议。 谢谢你的帮助。     

解决方法

这里的关键是承载您的服务的计算机正在运行哪个服务器操作系统。如果您使用的是Server 2008(或从技术上来说是Vista),则可以利用MSMQ 4自动带毒消息处理功能。这会自动将消息从队列中删除到特殊的毒害队列,以便服务可以继续处理消息。在MSMQ 3中,您必须在代码中执行此操作。 MSDN上的这篇文章应该为您提供一个良好的开端,并且本文介绍了有害消息处理代码。 我看不到您需要担心对服务代码进行多线程处理。如果要获得高吞吐量,请使用群集的MSMQ服务器和负载平衡的WCF服务,其方式比尝试滚动自己的基于MSMQ的多线程代码更可靠。     ,因此,最后我选择了MSMQ中的事务,并将事务对象传递给线程以确保与MSMQ一起安全地工作。非常快。