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

每X秒处理一次的排队WCF服务,wcf,msmq,throttling,Wcf,Msmq,Throttling,我需要创建一个服务,它可以在配置的时间间隔内处理排队的请求。例如,访问web并从网站获取财务数据,我们将请求限制为每秒一次。我是WCF新手,我不确定(1)使用MSMQ的WCF是否是实现此功能的正确选择?和(2)如果是这样,实施间隔的最佳机制是什么?线程等待?计时器(不确定如何工作)。WCF中没有内置任何东西允许您显式处理此问题,因此您仍然需要自己完成所有工作 虽然您的服务当然可以处理来自MSMQ的请求,但WCF中的MSMQ侦听器将尽快拾取和处理消息;您不能将它们配置为仅每X秒处理一次消息(如果有

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

WCF中没有内置任何东西允许您显式处理此问题,因此您仍然需要自己完成所有工作

虽然您的服务当然可以处理来自MSMQ的请求,但WCF中的MSMQ侦听器将尽快拾取和处理消息;您不能将它们配置为仅每X秒处理一次消息(如果有合适的工具,您可以伪造它,但在我看来,这并不是那么好)


如果处理请求之间的延迟不是很短,可以选择使用中间队列来保存挂起的请求。也就是说,无论什么发送真正的请求,都会将它们写入一个没有人直接侦听的队列(队列a),而您的WCF服务侦听不同的队列(队列B)。然后,让其他东西(可以像从任务调度器运行脚本一样简单)每X秒/分钟/任何时间运行一次,并将1条消息从队列a移动到队列B,从而触发实际的WCF服务运行。

或者您可以使用窗口服务来使用消息。如果您没有使用WCF功能,即消息发布后立即消费,那么您可能没有理由首先使用WCF。WCF和MSMQ是一个伟大的团队!绝对值得一看

WCF没有提供开箱即用的部分是“每x秒检查一次”。这里最好的方法是将WCF服务托管在Windows NT服务中,并在NT服务中设置一个计时器,该计时器每x秒只检查一次MSMQ队列。实施起来应该不会太难,真的。其美妙之处在于:您可以非常轻松地在NT服务中自托管WCF服务—只需几行代码,您就可以完全控制发生的事情和时间。有关详细信息,请参阅上的MSDN文档

资源:

  • 汤姆·霍兰德的博客文章系列