9

我正在使用 MSMQ 版本 4 并且有一个事务队列。我正在使用 WCF 来监听传入消息的队列。

在处理过程中存在对第三方组件的依赖,这些组件可能会出现故障或在较长时间内不可用。为了弥补这一点,我使用 MSMQ 4 ( http://msdn.microsoft.com/en-us/library/aa395218.aspx ) 中的毒消息处理功能来重试消息x次,等待时间为y 。

但是在某些情况下,我知道输入消息无效/中毒。当发生这种情况时,抛出异常将使消息遵循有害消息处理例程,就像所有其他消息一样,具有所有重试和等待时间。但是,当我知道消息已中毒时,我看不到有理由重试并等待配置的时间让中毒队列处理它。

有什么方法可以将消息显式标记为已中毒,这样它就不会遵循配置的重试流程并立即移至中毒队列?

4

1 回答 1

0

那么我会建议在这种情况下将请求数据存储在数据库中并且不要抛出任何异常,以便成功处理 WCF 消息并将从队列中删除。

如果需要,我们可以稍后处理这些数据,处理数据库中的数据比监控/管理毒队列更容易。

您可以根据这些配置进行一些配置,您可以决定消息的下一个处理时间戳,并且线程可以重新处理来自 DB 的此类消息。

于 2013-10-07T14:18:22.530 回答