您能帮我解决可能导致非事务性消息重复/错误排序的情况吗?据我了解,它可以是:
- 路由问题的结果
- 重新启动发送方/接收方 MSMQ 服务(或计算机)
- 发送方/接收方暂时在网络中不可用
- 已达到计算机配额
- 队列配额不可能是原因,对吧?
- 从传入队列读取时重新启动计算机/服务/应用程序(?)
- 当我从非事务队列中读取时,我可以在较早的消息之前读取消息吗?
如果我错了,你能纠正我并在我的列表中添加一些东西吗?
谢谢。
您能帮我解决可能导致非事务性消息重复/错误排序的情况吗?据我了解,它可以是:
如果我错了,你能纠正我并在我的列表中添加一些东西吗?
谢谢。
如果由于某种原因数据被发送两次,就会发生重复。提出的场景主要与网络问题有关(由于网络错误,消息沿多条路由发送,但最终到达的消息副本不止一份,或者握手包丢失迫使发送方重新发送)。
以某种方式重新启动 MSMQ 服务,这意味着它不会首先完全关闭(例如断电或 BSOD),这可能会导致数据包丢失导致重复 - 硬件接收但尚未由软件处理的数据丢失通过重启。
正常操作(例如超出配额)不应导致重复问题。网络上也不应该没有发送者或接收者,因为 MSMQ 是一种异步产品,旨在预期机器并不总是可用。
非事务性消息出现故障虽然很少见,但这是完全正常的,应该可以预料到。您永远不应该设计一个非事务性系统,该系统依赖于消息按照发送顺序到达队列。只有在同一个事务中发送的事务性消息才会按照发送顺序到达。这与发送多个独立的事务消息不同,因为不能保证顺序。
请注意,MSMQ 具有内置的重复检测。如果您遇到重复消息的问题,您可能只需要调整检测参数。MSMQ 如何防止重复消息