zoukankan      html  css  js  c++  java
  • Redis中使用Java代码的方式实现发布订阅流程

    场景

    Redis中的发布与订阅的概念与以命令行的方式实现发布订阅举例:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105042049

    在上面了解了Redis的发布与订阅的概念以及使用命令行的方式实现简单的发布与订阅流程后,

    在Java中怎样实现发布与订阅。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    JedisPushSub类

    Jedis中的JedisPubSub类是Jedis的一个抽象类,此类定义了public/subscribe的回调方法,通过继承JedisPubSub类

    重写回调方法。实现java中Redis的发布订阅。当Redis发生发布或者订阅的相关事件时会调用这些回调方法,只在

    回调方法中实现自己的业务逻辑。

    onMessage():发布者发布消息时,会执行订阅者的回调方法onMessage()接收发布的消息,在此方法实现消息接收后进行

    自定义的业务逻辑处理。

    实现订阅者

    打开IDEA新建Maven项目,然后添加jedis的依赖

        <dependencies>
            <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>3.0.1</version>
            </dependency>
    
        </dependencies>

    然后在test新建包,包下新建Java类RedisSubscriber

    然后使其继承JedisPubSub并重写onMessage方法

    在回调方法onMessage中实现简单的输出接受的消息和时间。

        @Override
        public void onMessage(String channel, String message) {
            SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
            System.out.println("订阅者:订阅频道["+channel+"],收到消息["+message+"],时间:"+df.format(new Date()));
        }

    然后创建main方法,创建Jedis对象和订阅者并订阅频道。

        public static void main(String[] args) {
            System.out.println("启动订阅者");
            //创建Jedis
            Jedis jedis = new Jedis("192.168.40.133", 6379);
            //创建订阅者
            RedisSubscriber redisSubscriber = new RedisSubscriber();
            //订阅频道
            jedis.subscribe(redisSubscriber,"badaodechengxvyuan");
        }

    完整示例代码

    package com.badao.redis;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPubSub;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class RedisSubscriber extends JedisPubSub {
    
        @Override
        public void onMessage(String channel, String message) {
            SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
            System.out.println("订阅者:订阅频道["+channel+"],收到消息["+message+"],时间:"+df.format(new Date()));
        }
    
        public static void main(String[] args) {
            System.out.println("启动订阅者");
            //创建Jedis
            Jedis jedis = new Jedis("192.168.40.133", 6379);
            //创建订阅者
            RedisSubscriber redisSubscriber = new RedisSubscriber();
            //订阅频道
            jedis.subscribe(redisSubscriber,"badaodechengxvyuan");
        }
    }

    然后运行main方法,启动该订阅者。

    参照上面以命令行的方式实现发布和订阅的流程,在上面发布一个消息

    我们就可以在此订阅者中接收到消息了。

    实现发布者

    再次新建一个Maven项目,然后引入jedis的依赖,同上新建包和类

    在类中新建main方法,然后发布消息

    package com.badao.redis;
    
    import redis.clients.jedis.Jedis;
    
    public class Publisher {
        public static void main(String[] args) {
            System.out.println("开始发布......");
            //创建Jedis
            Jedis jedis = new Jedis("192.168.40.133", 6379);
            //发布消息
            jedis.publish("badaodechengxvyuan", "紧急通知:...");
            System.out.println("消息发送完毕......");
        }
    }

    然后运行main方法,就可以在前面的订阅者的项目中收到消息了

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    std::exception标准和各平台实现的不同
    学习Linux必备的硬件基础一网打尽
    Git安装及SSH Key管理之Windows篇
    简要介绍一下Dos/Windows格式文件和Unix/Linux格式文件(剪不断理还乱的 和 )
    C/C++中的序列点
    STL容器之vector 的下标越界是否报错
    二维数组与指针的联系与区别
    C/C++ strlen函数为什么不能传入空指针NULL?
    棋盘游戏
    Knight Moves
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12551685.html
Copyright © 2011-2022 走看看