2

我一直在用非事务队列测试 WCF 的 NetMsmqBinding。我发现服务,即从队列中读取的部分,在关闭时偶尔会丢失一条消息。

例如,如果我有一个包含数字 1 - 10 消息的队列,并允许它在重新启动之前读取前五条消息(1、2、3、4、5),那么我可能会收到的其余消息是(7、8、9、10)。'6',它在服务关闭之前要接收的消息丢失了。

这是因为我使用的是非事务性队列吗?有什么方法可以防止这些消息在不进行事务处理的情况下丢失?

谢谢

4

1 回答 1

0

如果您无法使用事务队列,那么防止消息丢失的另一种解决方案是同时运行一个或多个冗余队列通道。

这意味着您发送的消息不是一次,而是 N 次。然后同时处理每条消息 N 次,最终结果应该是没有消息被丢弃。

这样做的原因是,即使每个处理通道都可能丢弃偶尔的消息,但所有 N 个处理通道都不太可能丢弃相同的消息。

您唯一需要确保的是您的系统可以处理添加的卷并且可以幂等地处理消息。

于 2012-08-29T07:08:57.407 回答