前言:redis提供了不少種功能或模式,能夠運用在不一樣的場景下,今天記錄下redis中的發佈、訂閱模式的基本使用html
注redis安裝及主從搭建請參考我其餘博文http://www.cnblogs.com/longjee/p/8652374.html,本文再也不贅述git
- redis中的發佈訂閱由三部分組成。發佈者(生產者)、通道(相似於topic)、訂閱者(消費者),具體結構以下圖:
- redis中實現發佈訂閱
- 首先咱們打開兩個客戶端 A、B
- A客戶端使用subscribe 命令訂閱通道test
- 而後客戶端B使用publish 命令發送消息
- 這個時候客戶端A能自動接收到消息
- 至此,使用redis簡單的搭建一個發佈訂閱服務就完成了。
- 使用Java基於redis實現發佈訂閱
- 首先咱們新建一個maven的項目。而後創建三個屬於該項目的module: redis-pub、redis-sub、redis-common
- 在redis-pubsub(下面簡稱父項目)的pom中添加jedis的依賴 ,本人使用2.9.0版本
- redis-common是我寫的一個公共組件
- 下面開始寫sub端(貼出部分爲核心代碼)
-
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 }
- pub端代碼(部分代碼)
-
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 }
- 測試:使用postman進行測試。結果以下。
至此,使用Java搭建一個簡單的發佈訂閱模式已經完成!github
若有什麼不對之處,敬請指教。redis
上面爲關鍵部分代碼,完整代碼請到個人github:https://github.com/wylsource/redis-pubsubmaven