2

场景:在 AppFabric 中托管的 WF 服务。MSMQ 传输。节流设置为高值。MaxConcurrentCalls 为 64。

客户端一次发送 3000 个请求。

问题:MSMQ 侦听器激活器似乎不遵守限制限制,一旦当前执行的实例数量增加,就会开始引发有害消息异常。

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

4

2 回答 2

1

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

MSMQ 适配器从队列中批量读取消息并推送到工作流中,快速饱和容量并导致超时和多次投递尝试,从而导致毒消息。

要确保的一件事是,在您的服务节流设置中,最大实例数 > 最大调用数,例如:

 <serviceThrottling 
       maxConcurrentCalls="5"
       maxConcurrentInstances="10" /> 
于 2012-11-23T21:33:01.700 回答
0

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

使用 MaxConcurrentInstances 来控制有多少工作流正在运行/在内存中。20000 似乎太高了。

于 2014-05-14T10:08:51.740 回答