首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSMQ -被反复处理的消息

MSMQ -被反复处理的消息
EN

Stack Overflow用户
提问于 2010-02-22 22:01:57
回答 1查看 1.1K关注 0票数 4

我们使用MSMQ和一个处理消息的集成机制。此机制在事务上下文中分析和验证每个消息,如果验证失败,则发生回滚,并将消息传递回队列。此外,集成机制等待20秒以再次处理错误消息。

问题是这种方法会导致错误消息被一遍又一遍地处理,即使我们清理了队列。我们也尝试过清理缓存,但也没有结果。

有谁有线索吗?

使用调用代码更新

代码语言:javascript
复制
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    //message validation function
    servicoIntegracao.Validar(identificadorMensagem, mensagem.Substring(_tamanhoCampoTipoEvento));
    servicoIntegracao.ExecutarServico();
    AtualizarStatusEventoNegocio(identificadorMensagem, Status.Finalizado);
    retorno = 0;
    ts.Complete();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-22 22:18:34

您应该更新消息并将其重新排队,而不是回滚读取操作。

您应该做的第一件事是为您不想再次处理的消息创建一个失败的验证队列。(保留消息以研究问题非常有用,而队列是一个很自然的位置。)

接下来,如果您只想重试一次,则可以将其写入重试队列并修改验证过程,以便将源自重试队列的失败发送到失败的验证队列。

如果希望能够多次重试验证,则应修改消息格式本身,使其包含重试的次数,并在每次进程将消息重新排队时递增该次数。

一旦消息达到允许的最大尝试次数,您的进程就可以将其发送到失败的验证队列。

使用MSMQ,您不必修改消息格式:您可以使用Message.Extension来存储尝试的次数,尽管它通常不受欢迎-正如它在该属性的文档中所说:“在可能的情况下,应该将消息数据包括在消息的Body属性中,而不是扩展属性中。”

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2311300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档