由于需要处理类似于订单到时自动修改状态的功能。比如说24小时未支付,订单状态改为取消这样的功能。
1.一开始使用定时器+列表页查询的时候修改状态。即启用一个定时器处理该批次的任务,同时在用户查询列表的时候,增加判断逻辑修改状态,一开始是适用的,不会有太大的问题。
2.java自带的DelayQueue,但是服务重启,就没有用了,所以不适用。
3.redis的键过期通知。需要启用redis的通知功能 notify-keyspace-events Ex,并订阅过期的key和处理业务。
4.使用mq的延迟队列(推荐这个),rocketmq开源的不支持任意时间精度,仅支持特定的level,可以自己配置相应的级别,如果使用阿里云的rocketmq的服务,则支持相应的时间精度,引入阿里云的ons-client:1.7.8.Final包
rabbitMq实现延迟队列,则需要安装插件rabbitmq-delayed-message-exchange