簡體   English   中英

msmq是否確保事務隊列上的數據完整性?

[英]Does msmq ensure data integrity on transactional queues?

我正在使用MSMQ傳輸byte數組。

格式化程序是BinaryMessageFormatter

目標隊列是私有隊列,我正在使用直接TCP通信。

目標計算機位於不同的LAN中,我通過其外部IP地址訪問它。

有一個防火牆可以將傳入的TCP通信路由到實際的目標機器(端口轉發)。

所以系統的架構如下所示:

[source machine] --> [destination firewall] --> [destination machine]

我一直在使用這個系統幾個月,一切都很順利。

最近我們遇到了防火牆故障。

顯然,這導致了數據損壞:

雖然隊列是事務性的,並且根據MSMQ,消息已成功傳遞到目標計算機,但消息的內容已損壞。

也就是說,從隊列中讀取消息的代碼引發了異常:

try
{
    var message = queue.Receive(readTimeout, transaction);
    if (message != null)
    {
        data = (byte[]) message.Body; // this line raises an exception
        return true;
    }
}
catch (Exception e)
{
    Logger.Error("error reading queue", e);
}

我不得不從隊列(頂部)刪除一些消息,然后系統恢復正常。

我的問題:

假設只有防火牆的故障導致了這種情況,並且知道它是一個事務性隊列,那么為什么消息被認為是被傳遞的?
MSMQ是否正在執行某種校驗和以確保事務隊列上的數據完整性?

在數據完整性和完整性方面,它目前看起來像MSMQ完全“信任”TCP層。

這只是猜測,但我認為分布式事務處理協調器 (DTC)可能會遇到麻煩。 顧名思義,DTC負責處理涉及網絡中多個系統的事務。

我在您的方案中可以想象的是,無法通過不同的LAN正確管理事務。

我的建議是檢查兩個網絡中涉及的DTC實例的配置,如果有選項可以啟用它們之間的通信和/或研究是否需要設置防火牆以允許DTC通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM