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

相关文章
相关标签/搜索