• 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/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    【算法每日一练】LeetCode02 两数之和
    【算法每日一练】LeetCode01 两数之和
    【算法题】09-单链表翻转
    【算法题】08- 构造数组的MaxTree
    【算法题】07-生成窗口最大值数组
    【算法题】06-用栈来解决汉诺塔问题
    【算法题】05-用一个栈实现另一个栈的排序
    【算法题】04-猫狗队列
    【算法题】03-使用递归和栈逆序一个栈
    【算法题】02-使用两个栈实现队列额的功能
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12551685.html
Copyright © 2020-2023  润新知