如何判断轮询MSMQ的WAS服务在忙时等待?

时间:2012-12-12 16:01:02

标签: wcf msmq was

我正在研究一个系统,其中包括运行工资单,重载过程。可能很快就会有很多请求在高峰时间运行工资单,批处理服务器将不堪重负。

我希望通过使用MSMQ(可能用后来的nservicebus等商业解决方案取而代之)来整理一个概念验证来应对这个问题。我使用此this example作为基础。我可以看到如何设置绑定并将其粘贴在一起,但我仍然需要一种方法来告诉WAS托管的订阅者只处理“运行繁重的工资核算流程”消息,如果他们不忙。否则,队列中的消息将立即被提取,我们遇到与以前相同的问题。

我可以设置订阅服务说“我很忙,我不能接收消息,把它留在队列中”?队列是否需要是事务性的?

2 个答案:

答案 0 :(得分:1)

如果您正在使用WCF,则无法有条件地激活通道,从而将消息留在队列中以供日后使用。

更好的解决方案是在完全不同的过程中托管消息接收器,例如作为Windows服务。然后可以根据您的服务窗口要求启用/禁用它们。

您还可以非常轻松地扩展消息接收器以处理更大的负载(通过托管接收器的更多实例)。

答案 1 :(得分:0)

执行此操作的一种方法是拥有2个队列,您的轮询始终首先检查高优先级队列,前提是该队列中没有项目是否从另一个队列中获取项目