dependency
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
class Constant
public class Constant {
public static final int REDIS_PORT = 6379;
public static final String REDIS_IP = "localhost";
public static final String REDIS_TEST_ZSET_KEY = "testZsetKey";
}
class DelayQueue
import java.util.Set;
import com.tbryant.test.domain.Constant;
import redis.clients.jedis.Jedis;
public class DelayQueue {
private static final Jedis JEDIS = new Jedis(Constant.REDIS_IP, Constant.REDIS_PORT);
static Long setMessage(String queueKey, String message, int delaySecond) {
return JEDIS.zadd(queueKey, System.currentTimeMillis() + delaySecond * 1000, message);
}
static String getMessage(String queueKey) {
Set<String> values = JEDIS.zrangeByScore(queueKey, 0, System.currentTimeMillis(), 0, 1);
if (!values.isEmpty()) {
String message = values.iterator().next();
System.out.println(message);
if (JEDIS.zrem(queueKey, message) > 0) {
return message;
}
}
return null;
}
}
class DelayQueueTestProducer
public class DelayQueueTestProducer {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(DelayQueue.setMessage(Constant.REDIS_TEST_ZSET_KEY, "TBryant-" + i,5));
}
}
}
class DelayQueueTestConsumer
public class DelayQueueTestConsumer {
public static void main(String[] args) {
while (true) {
String message = DelayQueue.getMessage(Constant.REDIS_TEST_ZSET_KEY);
if (null == message) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
System.out.println("process:" + message);
}
}
}
}