大致意思就是:MQ 顺序消费时,消息 2 依赖消息 1 ,消息 3 依赖消息 2 ,如果消息 2 出错了,后续还有几十万条消息,应该怎么处理?
- 我给出的方案是后续的消息先记到表里,等消息 2 能成功消费了,再重放表里的记录。
- 面试官回到:“它数量如果特别大的话,你要持久化能做下去吗?我们 MQ 的几十万条消息这边都在堵死,你发现出问题是两天前了,才会发现的报错,然后数据库整个都已经堵死在里面了。”
下面是面试官的原话:
- 假如我这个消息有顺序问题,前面一二三必须有依赖性,二依赖一,三依赖二,这时候如果前面的数据稍微出问题,能保证后面如果再读的话就发不出去了,因为比如说我有三个 update 语句,通过这种队列去消费了,然后你肯定要第一条消费完之后第二条消费对吧?不然第一条消费失败了,你直接拿第二条消费,还有第三条消费成功,那你怎么解决这个问题?
- 他第一条消费失败了,你怎么能处理呢,就保证他不会消费第二条或者是直接放在那里。
- 没成功的话就 hang 在那边,包括我们整个消费就不执行了,直接直接就业务就卡死了,只要你数据代码有问题,然后启动一下消费者,后面几万几十万进去都卡在那不动了。
