1

我正在开发一个系统,其中包括运行工资单、繁重的负载过程。很可能很快就会有如此多的请求在高峰时间运行工资单,以至于批处理服务器将不堪重负。

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

我可以将订阅服务设置为说“我很忙,我无法接收消息,将其留在队列中”吗?队列需要是事务性的吗?

4

2 回答 2

1

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

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

您还可以获得额外的好处,即能够非常轻松地扩展消息接收器以处理更大的负载(通过托管更多接收器实例)。

于 2012-12-12T16:09:04.093 回答
0

一种方法是拥有 2 个队列,您的轮询始终首先检查高优先级队列,只有当该队列中没有项目时才会从另一个队列中获取项目

于 2012-12-12T16:11:59.300 回答