• 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

  • 相关阅读:
    html中点击 checkbox (radio也可以) 隐藏tr 或 展现tr
    Innodb 索引结构了解 Innodb Index Structure
    linux 逐级显示文件命令tree
    MySQL 3.23 中文参考手册
    枚举进程for in
    Delphi中WebBrowser拦截网页Alert对话框消息(转)
    Remote Inject
    Delphi Union 使用
    Class TRTLCriticalSection
    让程序只运行一个实例
  • 原文地址:https://www.cnblogs.com/longjee/p/8668974.html
Copyright © 2020-2023  润新知