MQ 用来解耦挺好的。我们有个业务,计算用户在线时长,然后触发完成 “每日在线 15 分钟” 的每日任务。登录,登出都发消息,接到消息的程序减一下时间得到在线时间触发任务完成。
我们的系统有个毛病,可能出现闪登闪退,也就是同一个毫秒登录马上登出,这就尴尬了,消费者可能先收到登出再收到登录。这个时候程序员小伙子们可来劲了:“我知道我知道,可以用 MQ 的保证消息顺序能力”,然而被我制止了。我已经受的够够的了,一有什么达不到,立马诉诸各类技术框架的功能。
不急,先想想,登录的业务本质是什么?就是验证身份,成功之后开启一段会话,登出自然就是终结这段会话咯,在线时长就是这段会话的时长。好,那么当先收到登出消息时,无非就是发现这个会话没有开始时间么,但是他确实是一个存在的会话啊,没有开始时间就没有好了,先放着,一会儿登录消息来了那么会话开始时间也就补齐了,可以调用会话的 “计算会话时长” 方法计算在线时间了。
所以这关 MQ 的保证消息顺序什么事?我们是不是做技术做魔怔了?把太多的业务解决方案诉诸技术,系统越来越复杂,在错误的道路上越走越远。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.