【发布时间】:2011-08-04 11:46:41
【问题描述】:
我需要关于我的 WCF 服务的队列设计的建议。 所以,我有一个 wcf 服务和很多客户。客户端生成消息并将它们放入队列以供我的服务处理。 服务异步处理它们,客户端不需要回调或响应将消息放入队列。
我的服务需要从队列中取出消息以使用多线程进行处理。但是,如果我的服务将停止或失败,或者服务器立即关闭 - 此服务必须重新处理消息,这没有继续处理。
所以,我考虑 msmq 队列实现。 msmq 让我做好队列,但是这个需求怎么实现:reprocess message,那个没处理到最后?
可能有人会给我另一个赌注的建议。 感谢您的帮助。
【问题讨论】:
-
如果服务停止,消息应该保留在队列中,等它再次启动时再处理,这不是发生了吗?如果是这样,您如何托管读取 MSMQ 的 WCF 进程?
-
但是服务是否可以从队列中获取消息并开始处理。同时另一个处理线程从队列中获取另一个消息进行处理并启动进程。然后我们杀死服务进程,重启后发现队列中有2个项目没有处理?
-
每个线程都应该参与事务,因此两条消息都应该存在。另一种方法是创建指向同一队列的多个进程,而不是创建多个线程。这是“竞争消费者”模式,可以使用 MSMQ 4。