Java實現Redis的訊息訂閱和發布__Java

來源:互聯網
上載者:User

1.  首先需要一個訊息監聽器類

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對象的對應方法

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


3.  發布訊息測試類別

Public class TestPublish {    @Test    public void testPublish() throws Exception{        Jedis jedis = new Jedis("localhost");        jedis.publish("redisChatTest", "我是天才");        Thread.sleep(5000);        jedis.publish("redisChatTest", "我牛逼");        Thread.sleep(5000);        jedis.publish("redisChatTest", "哈哈");    }}
這個類向頻道redisChatTest發布訊息,第二步因為訂閱了該頻道,所以會收到該訊息。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.