经典的广播/订阅模式,看看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); }