知识卡片

验证不丢消息先记账再核对

专业/工作 · 596.a

内容

要验证消息中间件是否存在偶发性的消息丢失,可靠的做法不是等出问题再排查,而是主动构造一个可核对的闭环:生产者发送消息前先把消息记入一个全局账本(必须先记账再发送,避免消费比记账更快导致误判);消费者收到消息后从账本中核销;再起一个检测线程定期扫描账本,找出长时间未被核销、大概率已丢失的记录;最后配合分段的追踪日志(先看消息是否到达交换器,再看是否到达各下游队列)逐层定位丢失发生在哪个环节。发散:这套”先记账、后核对、再用日志定位”的模式,是验证任何异步、最终一致系统是否丢数据的通用方法——先把不确定的”是否送达”转化成确定的”账本是否清零”,再用细粒度日志缩小怀疑范围。

参考来源

《RabbitMQ实战指南》第11章《RabbitMQ扩展》