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發佈消息,第二步由於訂閱了該頻道,因此會收到該消息。高併發