场景:AppFabric中托管的WF服务。 MSMQ运输。限制设置为高值。 MaxConcurrentCalls at 64。
客户端在突发中发送3000个请求。
问题:MSMQ监听器激活器似乎不尊重限制限制,一旦当前正在执行的实例数量增加,就会开始引发病毒邮件异常。
我稍后会尝试通过将WF实例设置为在空闲时立即卸载来解决此问题,这应该会有所帮助。有没有办法配置激活器以使用这些限制,或任何更可靠的解决方案?
答案 0 :(得分:1)
造成这种情况的一个原因可能是长时间运行的工作流程(5秒以上)。
MSMQ适配器从队列中批量读取消息并将它们推送到工作流程,快速饱和容量并导致超时和多次传递尝试,这将导致有害消息。
要确保的一件事是,在您的服务限制设置中,最大实例>最大呼叫,例如:
<serviceThrottling
maxConcurrentCalls="5"
maxConcurrentInstances="10" />
答案 1 :(得分:0)
WF仅在Receive-SendReply范围内(即WCF调用仍在进行中)时尊重MaxConcurrentCalls限制。由于您使用MSMQ绑定并因此单向调用(仅接收),因此MaxConcurrentCalls基本上无关紧要。
使用MaxConcurrentInstances控制正在运行/在内存中的工作流程数。 20000似乎过高。