繁体   English   中英

MSMQ - 一遍又一遍地处理消息

[英]MSMQ - Messages being processed over and over

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

问题是这种方法导致错误消息被反复处理,即使我们清理队列也是如此。 我们也试过清理缓存,但是也没有显示结果。

有人有线索吗?

更新了调用代码

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();
}

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

您应该做的第一件事是为您不想再次处理的消息创建一个失败的验证队列 (保持消息来研究问题很有用,队列是一个自然的地方。)

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

如果您希望能够多次重试验证,则应修改消息格式本身以包括尝试次数,并在每次进程重新排队消息时增加该次数。

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

使用MSMQ,您不一定要修改消息格式:您可以使用Message.Extension来存储尝试次数,尽管它通常不赞成 - 正如它在该属性的文档中所说:“在可能的情况下,您应该包含消息数据在消息的Body属性而不是Extension属性。“

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM