msmq非事务性消息重复/错误排序

时间:2013-06-25 16:27:27

标签: msmq duplicate-data

是否可以帮助我解决可能导致 非交易 消息被重复/错误排序的情况。据我所知,它可以是:

  • 路由问题的结果
  • 重新启动发送方/接收方MSMQ服务(或计算机)
  • 发件人/收件人暂时无法在网络中使用
  • 达到计算机配额
  • 队列配额不能成为原因,对吗?
  • 从传入队列(?)
  • 读取时重新启动计算机/服务/应用程序
  • 当我从非事务性队列中读取时,是否可以读取之前消息之前到达的消息?

如果我错了,可以纠正我并在我的名单上添加一些内容吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果由于某种原因发送了两次数据,可能会发生重复。建议的方案主要与网络问题有关(由于网络错误,消息被发送到多条路由,但消息的多个副本最终到达,或握手数据包丢失迫使发送方重新发送)。

以某种方式重新启动MSMQ服务意味着它不会先干净地关闭(例如断电或BSOD)可能会导致数据包丢失重复 - 硬件接收数据但不是但是,软件因重启而丢失。

正常操作,例如超出配额,不应导致重复问题。网络上也没有发送者或接收者,因为MSMQ是一种异步产品,旨在使机器不能始终可用。

非交易消息出现故障,尽管很少见,但是完全正常应该是预期的。您永远不应该设计一个非事务性系统,它依赖于以与发送它们相同的顺序到达队列的消息。只有在同一个事务中发送的事务消息才会按照它们发送的顺序到达。这与发送多个独立的事务消息不同,订单无法保证。

请注意,MSMQ具有内置的重复检测功能。如果您有重复消息的问题,您可能只需要调整检测参数。 How MSMQ prevents duplicate messages