Jedis实现订阅发布

1. 发布线程

import java.util.concurrent.TimeUnit;

import redis.clients.jedis.Jedis;

public class Publish {
    public static String CHANNEL ="cctv.news";
    public static String[] news = new String[] {"We are brocasting Boxing",
                                                                                "We are brocasting night news",
                                                                                "We are brocasting Cooking",
                                                                                "We are brocating Football"};
    public static void getPublish() throws InterruptedException {
        Jedis jedis = JedisPoolClass.getResource();
        for(String curr:news) {
            jedis.publish(CHANNEL, curr);
            TimeUnit.SECONDS.sleep(1);
        }
        jedis.close();
    }
}

2. 订阅监听类

import redis.clients.jedis.JedisPubSub;

public class SubscriberListener extends JedisPubSub{

    @Override
    public void onMessage(String channel, String message) {
        super.onMessage(channel, message);
        System.out.println("get message from "+channel+" and the message is"+message);
    }

    @Override
    public void onPMessage(String pattern, String channel, String message) {
        super.onPMessage(pattern, channel, message);
        System.out.println("get message from "+channel+" and the message is"+message);
    }

    @Override
    public void onPSubscribe(String pattern, int subscribedChannels) {
        super.onPSubscribe(pattern, subscribedChannels);
        System.out.println("onPubscribe the channel "+subscribedChannels);
    }

    @Override
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
        super.onPUnsubscribe(pattern, subscribedChannels);
        System.out.println("onPubscribe the channel "+subscribedChannels);
    }

    @Override
    public void onSubscribe(String channel, int subscribedChannels) {
        super.onSubscribe(channel, subscribedChannels);
        System.out.println("onSubscribe the channel "+subscribedChannels);
    }

    @Override
    public void onUnsubscribe(String channel, int subscribedChannels) {
        super.onUnsubscribe(channel, subscribedChannels);
        System.out.println("onUnSubscribe the channel "+subscribedChannels);
    }
    
}

3.连接池

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisPoolClass {
    private static JedisPool pool = null;
    static {
        pool = new JedisPool("localhost", 6379);
    }
    public static Jedis getResource() {
        return pool.getResource();
    }
}

4.测试类

    /**
     * 必须得先发布再订阅,但是先发布再订阅会导致第一个发布的消息丢失,在实际应用的过程中要考虑到这点
     */
    private static void PubSubTest() {
        Jedis jedis = JedisPoolClass.getResource();
        Thread thread = new Thread(new Runnable() {
            
            @Override
            public void run() {
                try {
                    Publish.getPublish();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        
        jedis.subscribe(new SubscriberListener(), Publish.CHANNEL);
    }

猜你喜欢

转载自www.cnblogs.com/pamCoding/p/9549453.html
今日推荐