我一直在使用非事务性队列测试WCF的NetMsmqBinding。我发现服务,即从队列中读取的部分,在关闭时偶尔会丢失一条消息。
例如,如果我有一个包含编号为1- 10的消息的队列,并允许它在重启之前读取前五条消息(1,2,3,4,5),那么我可能得到的其余消息是(7,8,9,10)。“6”,它将在服务关闭之前接收的消息丢失。
这是因为我使用的是非事务性队列吗?有没有办法防止这些消息在不进行事务处理的情况下丢失?
谢谢
发布于 2012-08-29 15:08:57
如果您无法使用事务性队列,那么防止消息丢失的另一种解决方案是统一运行一个或多个冗余队列通道。
这意味着您发送的消息不是一次,而是N次。然后,每条消息被并发处理N次,最终结果应该是没有消息被丢弃。
这样做的原因是,即使每个处理通道可能会丢弃偶尔出现的消息,所有N个处理通道也不太可能丢弃相同的消息。
您必须确保的唯一一件事是您的系统可以处理增加的容量,并且可以幂等地处理消息。
https://stackoverflow.com/questions/11544098
复制相似问题