经典的广播/订阅模式,看看Redis的java如何实现:
JedisPubSub是一个抽象类,一般应该继承它,实现自己的逻辑,实现抽象方法,
在抽象方法中调用自己的逻辑即可。
订阅
@Test
public void subscribe_test() {
JedisPool pool = new JedisPool(new JedisPoolConfig(), host, port,
timeout);
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
public void publish_test() {
JedisPool pool = new JedisPool(new JedisPoolConfig(), host, port,
timeout);
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);
}