redis發佈(pub)、訂閱(sub)模式

前言:redis提供了不少種功能或模式,能夠運用在不一樣的場景下,今天記錄下redis中的發佈、訂閱模式的基本使用html

  注redis安裝及主從搭建請參考我其餘博文http://www.cnblogs.com/longjee/p/8652374.html,本文再也不贅述git

  • redis中的發佈訂閱由三部分組成。發佈者(生產者)、通道(相似於topic)、訂閱者(消費者),具體結構以下圖:

               

 

  • redis中實現發佈訂閱
  1. 首先咱們打開兩個客戶端 A、B
  2. A客戶端使用subscribe 命令訂閱通道test
  3. 而後客戶端B使用publish 命令發送消息
  4. 這個時候客戶端A能自動接收到消息
  5. 至此,使用redis簡單的搭建一個發佈訂閱服務就完成了。
  • 使用Java基於redis實現發佈訂閱
  1. 首先咱們新建一個maven的項目。而後創建三個屬於該項目的module: redis-pub、redis-sub、redis-common
  2. 在redis-pubsub(下面簡稱父項目)的pom中添加jedis的依賴 ,本人使用2.9.0版本
  3. redis-common是我寫的一個公共組件
  4. 下面開始寫sub端(貼出部分爲核心代碼)
  5.  1 package com.star4j.redissub.client;  2 
     3 import com.star4j.rediscommon.helper.JedisConnectionHelper;  4 import redis.clients.jedis.Jedis;  5 import redis.clients.jedis.JedisPubSub;  6 
     7 /**
     8  * @Author: WuYL  9  * @Description: 實現訂閱功能 10  * @Date: Create in 2018/3/29 15:21 11  * @Modified By: 12  */
    13 public abstract class SubClient extends JedisPubSub{ 14 
    15     private Jedis jedis = null; 16 
    17     public SubClient(Jedis jedis){ 18         this.jedis = jedis; 19  } 20 
    21     protected SubClient(){ 22         jedis = JedisConnectionHelper.get(); 23  } 24 
    25     /**
    26  * 訂閱一個通道 (必須實現該類才行) 27  * @param channal 28      */
    29     public final void sub(String channal){ 30         jedis.subscribe(this, channal); 31  } 32 
    33     /**
    34  * 有消息被推送過來時調用(子類實現) 35  * @param channel 36  * @param message 37      */
    38     public abstract void message(String channel, String message); 39 
    40  @Override 41     public  void onMessage(String channel, String message) { 42         this.message(channel, message); 43  } 44 
    45 }
    View Code

     

  6. pub端代碼(部分代碼)
  7.  1 package com.star4j.redispub.client;  2 
     3 import com.star4j.rediscommon.helper.JedisConnectionHelper;  4 import redis.clients.jedis.Jedis;  5 
     6 /**
     7  * @Author: WuYL  8  * @Description: 發佈端實現  9  * @Date: Create in 2018/3/29 15:41 10  * @Modified By: 11  */
    12 public class PubClient { 13 
    14     /**
    15  * 發佈消息 16  * @param channel 17  * @param message 18      */
    19     public static void pub(String channel, String message){ 20         Jedis jedis = JedisConnectionHelper.get(); 21  jedis.publish(channel, message); 22  JedisConnectionHelper.close(jedis); 23  } 24 }
    View Code

     

  8. 測試:使用postman進行測試。結果以下。

至此,使用Java搭建一個簡單的發佈訂閱模式已經完成!github

若有什麼不對之處,敬請指教。redis

上面爲關鍵部分代碼,完整代碼請到個人github:https://github.com/wylsource/redis-pubsubmaven

相關文章
相關標籤/搜索