WCF消息队列与可靠性配置详解
1. 消息队列基础
在消息处理过程中,若消息未能成功处理,会被移动到死信队列。若消息在所有重试尝试完成后仍未被服务成功处理,除非它是有害消息,否则也会被移至死信队列。
1.1 消息生存时间(Time-to-live,TTL)
NetMsmqBinding允许为消息配置生存时间(TTL)值,若消息在该时间内未被处理,将被移动到死信队列。可以通过以下方式声明式配置TTL:
<netMsmqBinding>
<binding name="netMsmq" maxRetryCycles="3" receiveErrorHandling="Drop"
retryCycleDelay="00:01:00" receiveRetryCount="2" timeToLive="00:00:30" />
</netMsmqBinding>
一旦达到过期时间,消息将被移动到死信队列,并注明原因。TTL在将消息移动到死信队列时优先于重试尝试。
1.2 有害消息(Poison messages)
尽管进行了重试,但由于服务或网络长时间不可用,消息可能仍无法被服务处理。此外,服务在处理消息时反复抛出异常也会导致消息处理失败,这类消息被称为有害消息。当存在有害消息且重试尝试完成后,队列需要决定如何处理该消息。NetMsmqBinding的ReceiveErrorHandling属性控制此行为,具体如下:
| 处理方式 | 描述 |
| ---- | --