具有动态优先级的MSMQ

时间:2010-08-25 13:25:37

标签: c# msmq

我现在正在做一个有一些时间限制的项目。安装程序是:Web服务接受(微小的)xml文件,我必须快速处理这些文件。

第一个也是最天真的想法是在请求调度程序本身处理这个处理,但是这不是扩展的,并且从一开始就注定要失败。

所以现在我正在考虑不同的传入请求负载,每个请求在我身边产生约50个工作。由于客户的规定,可供使用的技术有限。如果它不是Sql Server或MS MQ,它可能不会飞。

我想过要沿着MS MQ路线走下去(Web服务只是提交消息,后面是多个消费者流程),小概念模块就像魅力一样。

但是有一个问题:这些作业的优先级可能会在队列中发生很大变化。该系统对时间至关重要,因此,如果我们 - 无论出于何种原因 - 无法及时处理传入的工作,我们需要选择最新的工作。

基本上,用例从一般的可靠消息传递到(太)负载下的LIFO。旧条目仍然需要处理,但只是失去了所有优先权。

在MS MQ中有没有可管理的方法来构建这样的东西?


按要求扩展业务方面:

传入作业的处理绑定到某些轨道,其中物理商品被移动。如果我不能及时处理这些消息,事情就会“消失”。

我仍然希望结果用于统计目的,但现在真的需要关注更新的消息。

想想我能够影响机械的东西并改变在赛道上移动的东西 - 如果他们还没有超过X点那么......

1 个答案:

答案 0 :(得分:1)

因此,如果我理解这一点,您希望能够根据情况在优先级或到达时间之间切换队列。 MSMQ只能按优先级和到达时间对队列进行排序。

虽然我明白你要做的是什么,但我并不完全明白它的商业理由。你能扩展一下吗?

我建议使用服务将消息从传入队列移动到多个工作队列进行处理。在正常负载下,会有几个队列,每个队列都有一个监控线程。 在负载很重的情况下,新的流量都会在负载下降时仅进入一个“恐慌”队列。如有必要,可以暂停其他工作队列中的线程。

欢呼祝John Breakwell