【问题标题】:How do you detect unrecoverable data loss when using MSMQ's multicast?使用 MSMQ 的多播时如何检测不可恢复的数据丢失?
【发布时间】:2009-09-28 11:14:24
【问题描述】:

使用 MSMQ 多播时,如果(启用多播的)队列接收到一些消息,然后机器遇到暂时的网络连接丢失,那么在重新建立连接时它将再次开始接收消息。如果网络中断的持续时间很短,那么队列将接收所有消息(即使是在接收机器断开连接时发送的消息)。但是,如果持续时间足够长(几分钟),那么一些消息将会丢失……接收到的消息会有间隙。

这是预期行为,因为 MSMQ 多播提供可靠(但不保证交付)。我的问题是 MSMQ 是否在数据丢失时公开信息。如果我理解正确的话,PGM 已经能够检测到“不可恢复的数据丢失”,但是 MSMQ 会公开这些信息吗?

一种想法是在每条消息中包含一个整数,该整数在每次发送时递增。这将允许接收者检测消息中的间隙(来自单个发送者)。但是,我相信 PGM 已经做到了这一点。如果 PGM/MSMQ 已经可以检测到这一点,我不想在应用程序级别添加它。

有什么建议吗?

【问题讨论】:

    标签: .net msmq multicast


    【解决方案1】:

    我从未使用过 MSMQ,因此我不确定是否有办法通知底层 PGM 套接字不可恢复丢失。但是,在原始 PGM 套接字上,如果无法恢复丢失的数据包(例如,发送方的重发缓存中不再有数据),套接字将断开连接。在这种情况下,该套接字的 Receive 方法将返回 WSAECONNRESET。 MSMQ 中是否存在可能提醒您底层套接字连接重置的连接/断开连接事件?

    就我个人而言,我总是在我的消息中包含某种应用程序级别的标头,例如对于您的情况,一个源(如果接收者从多个发送者接收数据,您需要这个)和一个序列号属性,然后检查间隙,与一些带外快照服务配对,允许您通过可靠的协议请求丢失的数据像 TCP。

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多