.net - 如何使用 WCF 将事务性 MSMQ 中的消息显式标记为中毒

标签 .net wcf msmq msmqintegrationbinding

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

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

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

是否有任何方法可以将消息显式标记为中毒,以便它不会遵循配置的重试流程并立即移至中毒队列?

最佳答案

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

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

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

关于.net - 如何使用 WCF 将事务性 MSMQ 中的消息显式标记为中毒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721866/

相关文章:

c# - 如何设置消息队列的所有者?

c# - MassTransit 是否支持 MSMQ over HTTP 传输?

c# - 在 .NET 中捕获 SMTP 错误

c# - WCF:如何在单独的项目中将实现逻辑用于契约(Contract)接口(interface)?

.net - ASP.NET - 新应用程序的最佳队列系统

wcf - 调试 IIS Express Web 服务/silverlight 应用程序时出现安全错误

.net - 将单个数组作为参数的 WCF 操作可以使用 MessageContracts 吗?

c# - ClosedXML 解析数字中的逗号

.net - 如何取消Task.WhenAll?

.net - ASP.Net 移动 Web 表单发生了什么?