gpt4 book ai didi

c# - MSMQ - 反复处理的消息

转载 作者:行者123 更新时间:2023-11-30 12:18:22 27 4
gpt4 key购买 nike

我们正在使用 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 属性中包含消息数据。”

关于c# - MSMQ - 反复处理的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com