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


前言:redis提供了很多種功能或模式,可以運用在不同的場景下,今天記錄下redis中的發布、訂閱模式的基本使用

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

  • 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:https://github.com/wylsource/redis-pubsub


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM