排队的WCF服务,每隔X秒处理一次

时间:2010-04-07 16:17:57

标签: wcf msmq throttling

我需要创建一个可以在配置的时间间隔内处理排队请求的服务。例如,访问网站并从网站获取财务数据,要求我们将请求限制为每秒一次。我是WCF的新手,我不确定(1)WCF与MSMQ是否是实现这个的正确选择? (2)若有,执行间隔的最佳机制是什么?一个线程在等?一个计时器(不知道这将如何工作)。

3 个答案:

答案 0 :(得分:2)

WCF中没有内容可以让你明确地处理这个问题,所以你仍然需要自己完成所有的工作。

虽然您的服务当然可以处理来自MSMQ的请求,但WCF中的MSMQ侦听器将尽快选择并处理消息;你不能将它们配置为每隔X秒处理一次消息(你可以假设它使用正确的工具来假装它,但在我看来它不会那么好)。

如果处理请求之间的延迟不是很短,则可以使用一个中间队列来保存待处理请求。也就是说,无论发送什么实际请求,都将它们写入队列,无人直接侦听(队列A),而您的WCF服务侦听差异队列(队列B)。然后,拥有其他东西(可以像从任务调度程序运行的脚本一样简单),每X秒/分钟/运行一次,并且只从队列A向队列B移动1条消息,从而触发实际的WCF服务运行。 / p>

答案 1 :(得分:2)

WCF和MSMQ是一支伟大的团队!绝对值得一试。

WCF未提供开箱即用的部分是“每隔x秒检查一次”。这里最好的方法是在Windows NT服务中托管你的WCF服务,并在NT服务中有一个计时器,每隔x秒只检查一次MSMQ队列。实在不应该太难实现。美妙之处在于:您可以非常轻松地在NT服务中自行托管WCF服务 - 只需几行代码,您就可以完全控制正在发生的事情以及何时发生。有关详细信息,请参阅How to Host a WCF service in a managed application上的MSDN文档。

<强>资源:

答案 2 :(得分:0)

或者您可以使用窗口服务来代替消息。如果您在发布消息时没有使用消费消息的WCF功能,那么您可能没有理由首先使用wcf