**一个定时器每一秒生产定量订单放入缓存;
另一个定时器每一秒从缓存中取出符合条件的数据并处理**
/**
* 运行逻辑:
* 一个定时器每一秒生产定量订单放入缓存;
* 另一个定时器每一秒从缓存中取出符合条件的数据并处理。
* @author waniz
*
*/
public class ProduceOrder {
private static ScheduledThreadPoolExecutor schedulerProducer;
private static ScheduledThreadPoolExecutor schedulerConsumer;
private static int ORDER_NUM = 10;
static{
schedulerProducer = new ScheduledThreadPoolExecutor(1);
schedulerConsumer = new ScheduledThreadPoolExecutor(1);
}
/**
* 定时产生订单的方法
* 返回订单的Id
* @return
*/
@SuppressWarnings("boxing")
public static void produce(){
final Jedis jedis = JedisUnit.getEdis("**.**.**");
System.out.println("jedis's status:"+jedis.ping());
schedulerProducer.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
List<String> list = generateNums();
for(String str : list){
Double score = Double.valueOf(TimeUnit.getTime())+10;
System.out.println(str);
jedis.zadd("order",score, str);
}
}
}, 0, 1, java.util.concurrent.TimeUnit.SECONDS);
}
/**
* 每隔一秒扫描符合条件的订单并且执行操作
*/
public static void consume(){
final Jedis jedisMaster = JedisUnit.getEdis("**.**.**");
final Jedis jedis = JedisUnit.getEdis("**.**.**");
System.out.println("jedis's status:"+jedis.ping());
schedulerConsumer.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Double time = Double.valueOf(TimeUnit.getTime());
Set<String> set = jedis.zrangeByScore("order", time, time);
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next()+"命中,发送短信!");
}
if(set.size()>0){
jedisMaster.zremrangeByScore("order", time, time);
}
}
}, 1, 1, java.util.concurrent.TimeUnit.SECONDS);
}
/**
* 获取定量单子
* @return
*/
private static List<String> generateNums(){
List<String> list = new ArrayList<String>();
for(int i=0;i<ORDER_NUM;i++){
list.add(TimeUnit.getTime()+":单"+i);
}
return list;
}
public static void main(String[] args){
produce();
consume();
/* new ScheduledThreadPoolExecutor(1).scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println(System.currentTimeMillis());
}
}, 0, 1,java.util.concurrent.TimeUnit.SECONDS);*/
}
}