如何使用jedis进行发布订阅

jedis实现发布订阅,是通过让发布者和订阅者同时对某个channel(频道)进行操作,订阅者订阅了某个频道例如channel1,发布者往这个channel1里面publish东西,在pubsublistener的回调中就能收到这个消息。

代码如下:

源码工程:链接: https://pan.baidu.com/s/1nuSY99B 密码: huni

1、订阅者

package redis;

import redis.clients.jedis.Jedis;

class Subscribe {  

    public void redisSubscriber(final Jedis redisClient, final RedisMsgPubSubListener listener,final String channel ) {  
        new Thread(new Runnable() {  
            public void run() {  
                 System.out.println("订阅了:"+channel);  
                 redisClient.subscribe(listener, channel); 
            }  
        }).start();  
    }  
    public static void main(String args[]){
        new Subscribe().redisSubscriber(new RedisHelper().getJedis(), new RedisMsgPubSubListener(), "channel1");
    }
}

2.发布者

package redis;

import redis.clients.jedis.Jedis;

public class Publish {
       public void redisPublish(final Jedis redisClient,String channel,String message) throws Exception{  
            redisClient.publish(channel,message);  
        }
       public static void main(String args[]){
           try {
            new Publish().redisPublish(new RedisHelper().getJedis(),"channel1","我是天才");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       }
}

3、redishelper

package redis;
import redis.clients.jedis.Jedis;

/**
 * Created by cmq on 2017/1/9.
 */
public class RedisHelper {
        public Jedis getJedis(){
            Jedis jedis = new Jedis("222.201.145.215");
            jedis.select(1);
            return jedis;
        }
}

4、RedisMsgPubSubListener

package redis;

import redis.clients.jedis.JedisPubSub;  

public class RedisMsgPubSubListener extends JedisPubSub {  
     
    public void unsubscribe() {  
        super.unsubscribe();  
    }  
  
     
    public void unsubscribe(String... channels) {  
        super.unsubscribe(channels);  
    }  
  
     
    public void subscribe(String... channels) {  
        super.subscribe(channels);  
    }  
  
     
    public void psubscribe(String... patterns) {  
        super.psubscribe(patterns);  
    }  
  
     
    public void punsubscribe() {  
        super.punsubscribe();  
    }  
  
     
    public void punsubscribe(String... patterns) {  
        super.punsubscribe(patterns);  
    }  
  
     
    public void onMessage(String channel, String message) {  
        System.out.println("channel:" + channel + "receives message :" + message); 
        try {
            new Publish().redisPublish(new RedisHelper().getJedis(), "channel1", message+"第二次publish");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       // this.unsubscribe();  
    }  
  
     
    public void onPMessage(String pattern, String channel, String message) {  
  
    }  
  
     
    public void onSubscribe(String channel, int subscribedChannels) {  
        System.out.println("channel:" + channel + " is been subscribed:" + subscribedChannels);  
    }  
  
     
    public void onPUnsubscribe(String pattern, int subscribedChannels) {  
  
    }  
  
     
    public void onPSubscribe(String pattern, int subscribedChannels) {  
  
    }  
  
     
    public void onUnsubscribe(String channel, int subscribedChannels) {  
        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);  
    }  
}  
原文地址:https://www.cnblogs.com/caimuqing/p/6276897.html