Pub/Sub发布订阅官方地址
https://redis.io/topics/pubsub
Java代码
发布者
public class PublishDemo extends Thread {
private final JedisPool jedisPool;
public PublishDemo(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public void run() {
Jedis jedis = jedisPool.getResource();
//标准输入流
//Java的装饰者模式 使用BufferedReader进行装饰
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)) ;
System.out.println("准备发布!");
while (true) {
try {
String line = reader.readLine();
if ("exit".equals(line)) {
break;
}
jedis.publish("demo", line);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
订阅消息处理
public class SubscribeDemo extends JedisPubSub {
@Override
public void onMessage(String channel, String message) {
System.out.println("通道" + channel + "发布消息:" + message);
}
}
订阅者
public class SubscribeRunnable implements Runnable {
private final JedisPool jedisPool;
public SubscribeRunnable(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public void run() {
Jedis jedis = jedisPool.getResource();
SubscribeDemo subscribeDemo = new SubscribeDemo();
System.out.println("开始订阅!");
jedis.subscribe(subscribeDemo, "demo");
jedis.close();
}
}
测试
public class PublishAndSubscribeDemo {
public static void main(String[] args) {
JedisPool pool = new JedisPool("127.0.0.1", 6379);
PublishDemo publish = new PublishDemo(pool);
publish.start();
SubscribeRunnable subscribe = new SubscribeRunnable(pool);
subscribe.run();
}
}
结果