消息系统顺序问题小计

目录
  1. 环境
  2. 问题
  3. 解决

今天就系统中的问题简单调研了一下消息系统顺序执行的解决方案。

环境

使用的消息系统是RabbitMQ。

问题

有两个操作操作1和操作2要放入消息系统,操作2要在操作1成功之后执行,否则操作2会异常。

这两个操作是前端一次用户操作里的两次请求,网上有很多说法如 将两条消息放入同一个队列、使用消息序列号SN等,但在不修改前端、两次请求到达后端的顺序不确定的情况下,不好实现。

解决

1、消费者收到操作2消息后先确认操作1的执行结果,符合条件再执行,否则将消息退回消息队列,可以延迟退回以防下次派发执行时操作1还未执行完成,同时未避免操作2可能的死循环,还可以设置重试次数,超过次数则放入死信队列或存储下来人工处理。

2、另外一种解决是先将操作2的内容存储起来,定时去尝试执行(可以临时解决问题但感觉不够通用,还需要专门去存储临时数据)。