MSMQ与AppFabric托管的WF进行了对比

时间:2012-11-23 07:20:03

标签: workflow-foundation-4 msmq appfabric

场景:AppFabric中托管的WF服务。 MSMQ运输。限制设置为高值。 MaxConcurrentCalls at 64。

客户端在突发中发送3000个请求。

问题:MSMQ监听器激活器似乎不尊重限制限制,一旦当前正在执行的实例数量增加,就会开始引发病毒邮件异常。

我稍后会尝试通过将WF实例设置为在空闲时立即卸载来解决此问题,这应该会有所帮助。有没有办法配置激活器以使用这些限制,或任何更可靠的解决方案?

2 个答案:

答案 0 :(得分:1)

造成这种情况的一个原因可能是长时间运行的工作流程(5秒以上)。

MSMQ适配器从队列中批量读取消息并将它们推送到工作流程,快速饱和容量并导致超时和多次传递尝试,这将导致有害消息。

要确保的一件事是,在您的服务限制设置中,最大实例>最大呼叫,例如:

 <serviceThrottling 
       maxConcurrentCalls="5"
       maxConcurrentInstances="10" /> 

答案 1 :(得分:0)

WF仅在Receive-SendReply范围内(即WCF调用仍在进行中)时尊重MaxConcurrentCalls限制。由于您使用MSMQ绑定并因此单向调用(仅接收),因此MaxConcurrentCalls基本上无关紧要。

使用MaxConcurrentInstances控制正在运行/在内存中的工作流程数。 20000似乎过高。