---
//延时投递
Message msg = new Message(topic,tag,jsonData.getBytes());
long delayTime = System.currentTimeMillis()+3000L;
msg.setStartDeliverTime(delayTime);
---
//定时投递
SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2019-09-20 09:48:00").getTime();
msg.setStartDeliverTime(timeStamp);
其实本质上没有区别。那种写法都可以。
1、定时和延时消息的 msg.setStartDeliverTime 参数需要设置成当前时间戳之后的某个时刻(单位毫秒)。如果被设置成当前时间戳之前的某个时刻,消息将立刻投递给消费者。
2、定时和延时消息的 msg.setStartDeliverTime 参数可设置40天内的任何时刻(单位毫秒),超过40天消息发送将失败。
3、StartDeliverTime 是服务端开始向消费端投递的时间。 如果消费者当前有消息堆积,那么定时和延时消息会排在堆积消息后面,将不能严格按照配置的时间进行投递。
4、客户端与服务器时间差导致时间不准确。比如客户端取当前系统时间,延迟3秒,服务端时间比客户端快一秒也就是这条消息将在2秒后被消费。
5、消息受消费保留时间限制,在消息开始消费时间点开始往后保留三天。即假设延迟10天消费,消息未被消费成功,将在第13天的时候被删除。