1)redis准备
启动服务器
./src/redis-server redis.config
启动客户端
./src/redis-client
2)配置redis.properties
redis.url=localhost
redis.port=6379
redis.maxIdle=30
redis.minIdle=10
redis.maxTotal=100
redis.maxWait=10000
3)JedisPoolUtils.java
package org.example.mq;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.InputStream;
import java.util.Properties;
public class JedisPoolUtils {
private static JedisPool pool = null;
static {
InputStream in = JedisPoolUtils.class.getClassLoader().getResourceAsStream("redis.properties");
Properties pro = new Properties();
try {
pro.load(in);
} catch (Exception e) {
e.printStackTrace();
}
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(Integer.parseInt(pro.get("redis.maxIdle").toString()));
poolConfig.setMaxWaitMillis(Integer.parseInt(pro.get("redis.maxWait").toString()));
poolConfig.setMinIdle(Integer.parseInt(pro.get("redis.minIdle").toString()));
poolConfig.setMaxTotal(Integer.parseInt(pro.get("redis.maxTotal").toString()));
pool = new JedisPool(poolConfig, pro.getProperty("redis.url"), Integer.parseInt(pro.get("redis.port").toString()));
}
public static Jedis getJedis() {
return pool.getResource();
}
}
4)MessageProducer.java
package org.example.mq;
import redis.clients.jedis.Jedis;
public class MessageProducer extends Thread {
public static final String MESSAGE_KEY = "message:queue";
private volatile int count;
public void putMessage(String message) {
try (Jedis jedis = JedisPoolUtils.getJedis();) {
Long size = jedis.lpush(MESSAGE_KEY, message);
System.out.println(Thread.currentThread().getName() + " put message,size=" + size + ",count=" + count);
count++;
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public synchronized void run() {
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
for (int i = 0; i < 1000; i++) {
putMessage(s);
}
}
public static void main(String[] args) {
MessageProducer messageProducer = new MessageProducer();
Thread t1 = new Thread(messageProducer, "thread1");
Thread t2 = new Thread(messageProducer, "thread2");
Thread t3 = new Thread(messageProducer, "thread3");
Thread t4 = new Thread(messageProducer, "thread4");
Thread t5 = new Thread(messageProducer, "thread5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
5)MessageConsumer.java
package org.example.mq;
import redis.clients.jedis.Jedis;
import java.util.List;
public class MessageConsumer implements Runnable {
public static final String MESSAGE_KEY = "message:queue";
private volatile int count;
public void consumerMessage() {
try (Jedis jedis = JedisPoolUtils.getJedis()) {
List<String> brpop = jedis.brpop(0, MESSAGE_KEY);//0是timeout,返回的是一个集合,第一个是消息的key,第二个是消息的内容
System.out.println(brpop);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
consumerMessage();
}
}
public static void main(String[] args) {
MessageConsumer messageConsumer = new MessageConsumer();
Thread t1 = new Thread(messageConsumer, "thread6");
Thread t2 = new Thread(messageConsumer, "thread7");
t1.start();
t2.start();
}
}