簡體   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