創建延時隊列item,這裏用到了lombok,也可以自己寫get和set方法
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
import lombok.Data;
@Data
public class DelayItem implements Delayed{
private long time;
private Order order;
@Override
public int compareTo(Delayed o) {
DelayItem item = (DelayItem) o;
long diff = this.time - item.time;
if (diff <= 0) {
return -1;
}else {
return 1;
}
}
@Override
public long getDelay(TimeUnit unit) {
return time - System.currentTimeMillis();
}
public DelayItem(Order order, long time) {
super();
this.time = time;
this.order = order;
}
public DelayItem(Order order, long time, TimeUnit unit) {
this.order = order;
this.time = System.currentTimeMillis() + (time > 0? unit.toMillis(time): 0);
}
}
使用方式(這裏建議另起一個線程,進行推送)
// 推送時間間隔 這裏最好寫配置文件
String delayTime = "1,5,10";
String[] delayTimeItem = delayTime.split(",");
// 封裝推送數據
DelayQueue<DelayItem> queue = new DelayQueue<DelayItem> ();
Order order = new Order ("ORDER123456");
for (String time : delayTimeItem) {
DelayItem item = new DelayItem(order, Integer.parseInt(time), TimeUnit.SECONDS);
queue.put(item);
}
for (int i = 0; i < queue.size(); i++) {
DelayItem take = queue.take();
String resut=HttpClientUtils.doPost("http://test.com/api/test",JSON.toJSON(take.getOrder()), null);
if ("SUCCESS".equals(resut)) {
return;
}
}