Redis订阅与发布

Redis订阅与发布

摘要:Redis通过PUBLISH,SUBSCRIBE等命令实现了订阅与发布模式,这个功能提供两种信息机制,分别是订阅/发布到频道和订阅/发布到模式。


1、订阅消息监听器
该类需要继承JedisPubSub,并实现抽象方法,该监听器用来订阅一个频道,在订阅该频道,取消订阅,收到消息等状态会对应调用相关的方法。
public class RedisMsgPubSubListener extends JedisPubSub {  
    @Override  
    public void unsubscribe() {  
        super.unsubscribe();  
    }  
  
    @Override  
    public void unsubscribe(String... channels) {  
        super.unsubscribe(channels);  
    }  
  
    @Override  
    public void subscribe(String... channels) {  
        super.subscribe(channels);  
    }  
  
    @Override  
    public void psubscribe(String... patterns) {  
        super.psubscribe(patterns);  
    }  
  
    @Override  
    public void punsubscribe() {  
        super.punsubscribe();  
    }  
  
    @Override  
    public void punsubscribe(String... patterns) {  
        super.punsubscribe(patterns);  
    }  
  
    @Override  
    public void onMessage(String channel, String message) {  
        System.out.println("channel:" + channel + "receives message :" + message);  
        this.unsubscribe();  
    }  
  
    @Override  
    public void onPMessage(String pattern, String channel, String message) {  
  
    }  
  
    @Override  
    public void onSubscribe(String channel, int subscribedChannels) {  
        System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);  
    }  
  
    @Override  
    public void onPUnsubscribe(String pattern, int subscribedChannels) {  
  
    }  
  
    @Override  
    public void onPSubscribe(String pattern, int subscribedChannels) {  
  
    }  
  
    @Override  
    public void onUnsubscribe(String channel, int subscribedChannels) {  
        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);  
    }  
}

2 订阅测试类
该类实现频道的订阅监听,订阅,取消订阅
public class TestSubscribe {  
    @Test  
    public void testSubscribe() throws Exception{  
    	JedisPool pool = new JedisPool(new JedisPoolConfig(), "192.168.1.100",6379,60000,"123456");
        Jedis jedis = pool.getResource();
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();  
        // 使用listener监听频道"redisChatTest"
        jedis.subscribe(listener, "redisChatTest");  
        // other code  
    }  
} 

3 发布测试类
向频道发布消息
public class TestPublish {  
    @Test  
    public void testPublish() throws Exception{  
    	JedisPool pool = new JedisPool(new JedisPoolConfig(), "192.168.1.100",6379,60000,"123456");
        Jedis jedis = pool.getResource(); 
        jedis.publish("redisChatTest", "我是天才");  
        Thread.sleep(5000);  
        jedis.publish("redisChatTest", "我牛逼");  
        Thread.sleep(5000);  
        jedis.publish("redisChatTest", "哈哈");  
    }  
}

4 测试
先运行TestSubscribe中的testSubscribe

在运行TestPublish中的testPublish


猜你喜欢

转载自blog.csdn.net/u012377333/article/details/80266259