我一直在用非事务性队列测试WCF的NetMsmqBinding。我发现服务(从队列中读取的部分)在关闭时偶尔会丢失一条消息。
例如,如果我有一个包含数字1 - 10的消息的队列,并允许它在重新启动之前读取前五个消息(1,2,3,4,5),那么剩下的消息我可能得到的是(7,8,9,10)。 '6',它将在服务关闭之前收到的消息丢失。
这是因为我使用的是非事务性队列吗?有没有办法防止这些消息丢失而不进行事务处理?
由于
答案 0 :(得分:0)
如果您无法使用事务性队列,则另一种防止丢失消息的解决方案是同时运行一个或多个冗余排队通道。
这意味着您不是一次发送消息,而是N次。然后,每个消息同时处理N次,最终结果应该是不丢弃任何消息。
这样做的原因是,即使每个处理通道都可以丢弃偶尔的消息,但所有N个处理通道都不可能丢弃相同的消息。
您唯一需要确保的是,您的系统可以处理添加的卷并可以理想地处理消息。