目前公司的一个电商系统的订单在不同状态下会有不同的定时任务,如:下单后如果商家不审核多少时间后自动审核; 审核后多少时间后不支付自动关闭订单等等还有几种状态,目前这些定时任务的实现是两种方式配合:
- quartz定时任务每隔半小时自动扫订单表处理。
- 对某个订单进行操作时触发状态判断,进行响应操作。
目前这两种方式结合能满足业务需求,但总觉得不是太好,所以想请教大家一般都是怎么做的,或者有什么好的案例实践?还有有没有能够动态生成定时任务并能准时执行的方案?
谢谢。
目前公司的一个电商系统的订单在不同状态下会有不同的定时任务,如:下单后如果商家不审核多少时间后自动审核; 审核后多少时间后不支付自动关闭订单等等还有几种状态,目前这些定时任务的实现是两种方式配合:
目前这两种方式结合能满足业务需求,但总觉得不是太好,所以想请教大家一般都是怎么做的,或者有什么好的案例实践?还有有没有能够动态生成定时任务并能准时执行的方案?
谢谢。
延迟队列
rabbitmq-delayed-message-exchange
延迟队列让您可以将队列中新消息的传递操作推迟指定的毫秒数
byte[] messageBodyBytes = "delayed payload".getBytes("UTF-8");
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("x-delay", 5000);
AMQP.BasicProperties.Builder props = new AMQP.BasicProperties.Builder().headers(headers);
channel.basicPublish("my-exchange", "", props.build(), messageBodyBytes);
如上会将消息推迟5000
毫秒才会推送给消费者.
优点:
你这两种方案实时性非常的不好,
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
不好意思,木有太好的思路哎,目前采取第一种方法和第二种方法同时用会多一些。
另外两个答主提到的延迟队列,怎么满足楼主的需求呢,我也没看明白