Java實現Redis的消息訂閱和發佈

1.  首先須要一個消息監聽器類redis

package com.sogou.baike.testimport.testSubscribe;
 
import redis.clients.jedis.JedisPubSub;
 
/**
 * Created by denglinjie on 2016/6/29.
 */
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);
    }
}

該類須要繼承JedisPubSub ,並實現其抽象方法,經過方法的名稱很清楚的看出來,這個監聽器是用來訂閱一個頻道,在訂閱該頻道,取消訂閱,收到消息等狀態會對應調用相關的方法性能優化

2.  訂閱測試類架構

public class TestSubscribe {
    @Test
    public void testSubscribe() throws Exception{
        Jedis jedis = new Jedis("localhost");
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
        jedis.subscribe(listener, "redisChatTest");
        //other code
    }
}

該類實現對頻道redisChatTest的訂閱監聽,頻道的訂閱,取消訂閱,收到消息都會調用listener對象的對應方法併發

若是對Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構。感興趣能夠747981058,羣內會有不按期的發放免費的資料連接,這些資料都是從各個技術網站蒐集、整理出來的,若是你有好的學習資料能夠私聊發我,我會註明出處以後分享給你們。分佈式

注意:subscribe是一個阻塞的方法,在取消訂閱該頻道前,會一直阻塞在這,只有當取消了訂閱纔會執行下面的other code,參考上面代碼,我在onMessage裏面收到消息後,調用了this.unsubscribe(); 來取消訂閱,這樣纔會執行後面的other codeide

3.  發佈消息測試類微服務

Public class TestPublish {
    @Test
    public void testPublish() throws Exception{
        Jedis jedis = new Jedis("localhost");
        jedis.publish("redisChatTest", "Java架構技術交流");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "加入");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "747981058");
    }
}

這個類向頻道redisChatTest發佈消息,第二步由於訂閱了該頻道,因此會收到該消息。高併發

相關文章
相關標籤/搜索