經典的廣播/訂閱模式,看看Redis的java如何實現:java
JedisPubSub是一個抽象類,通常應該繼承它,實現本身的邏輯,實現抽象方法,ide
在抽象方法中調用本身的邏輯便可。繼承
@Test
public void subscribe_test() {
JedisPool pool = new JedisPool(new JedisPoolConfig(), host, port,
timeout); get
Jedis jedis = pool.getResource();
JedisPubSub jedisPubSub = new JedisPubSub() {
@Override
public void onUnsubscribe(String channel, int number) {
System.out.println("channel: "+channel);
System.out.println("number :"+number);
}
@Override
public void onSubscribe(String channel, int number) {
System.out.println("channel: "+channel);
System.out.println("number :"+number);
}
@Override
public void onPUnsubscribe(String arg0, int arg1) {
}
@Override
public void onPSubscribe(String arg0, int arg1) {
}
@Override
public void onPMessage(String arg0, String arg1, String arg2) {
}
@Override
public void onMessage(String channel, String msg) {
System.out.println("收到頻道 : 【" + channel +" 】的消息 :" + msg);
}
};
jedis.subscribe(jedisPubSub, new String[]{"channel1","channel2"});
pool.returnResource(jedis);
}test
Jedis jedis = pool.getResource();
long i = jedis.publish("channel1", "channel1的朋友們,大家好嗎?親");
System.out.println(i+" 個訂閱者接受到了 channel1 消息");
i = jedis.publish("channel2", "你好呀,親");
System.out.println(i+" 個訂閱者接受到了 channel2 消息");
pool.returnResource(jedis);
}channel