我需要有关WCF服务的队列设计的建议。 所以,我有一个wcf服务和很多客户。客户端生成消息并将其放入队列以供我的服务处理。 服务处理它们异步,客户端在将消息放入队列时不需要回调或响应。
我的服务需要从队列中取消消息以便使用多线程进行处理。但是,如果我的服务将停止或失败,或服务器立即关闭 - 此服务必须重新处理消息,这不会导致处理。
所以,我考虑msmq队列实现。 Msmq让我排好队,但是如何实现这个要求:重新处理消息,但是没有处理到最后?
可能有人会给我另一个打赌的建议。 谢谢你的帮助。
答案 0 :(得分:0)
这里的关键是托管您服务的计算机正在运行的服务器操作系统。如果您使用的是Server 2008(或技术上的Vista),那么您可以利用MSMQ 4自动中毒消息处理。这会自动将队列中的消息删除到特殊的毒性队列,以便服务可以继续处理消息。在MSMQ 3中,您必须在代码中执行此操作。 This article on MSDN应该提供良好的开端和this article shows the poison消息处理代码。
我不认为您需要担心多线程服务代码。如果您想要高吞吐量,那么使用群集MSMQ服务器和负载平衡的WCF服务,它比尝试推送您自己的基于MSMQ的多线程代码更可靠。
答案 1 :(得分:0)
所以,最后我在MSMQ中选择事务并将事务对象传递给线程,以便线程安全地使用MSMQ。这很快。