Java实现Redis的消息订阅和发布

1.  首先需要一个消息监听器类

package com.sogou.baike.testimport.testSubscribe;

import redis.clients.jedis.JedisPubSub;

/**
 * Created by denglinjie on 2016/6/29.
 */
public class RedisMsgPubSubListener extends JedisPubSub {
    @Override
    public void unsubscribe() {
        super.unsubscribe();
    }

    @Override
    public void unsubscribe(String... channels) {
        super.unsubscribe(channels);
    }

    @Override
    public void subscribe(String... channels) {
        super.subscribe(channels);
    }

    @Override
    public void psubscribe(String... patterns) {
        super.psubscribe(patterns);
    }

    @Override
    public void punsubscribe() {
        super.punsubscribe();
    }

    @Override
    public void punsubscribe(String... patterns) {
        super.punsubscribe(patterns);
    }

    @Override
    public void onMessage(String channel, String message) {
        System.out.println("channel:" + channel + "receives message :" + message);
        this.unsubscribe();
    }

    @Override
    public void onPMessage(String pattern, String channel, String message) {

    }

    @Override
    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);
    }

    @Override
    public void onPUnsubscribe(String pattern, int subscribedChannels) {

    }

    @Override
    public void onPSubscribe(String pattern, int subscribedChannels) {

    }

    @Override
    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
    }
}

该类需要继承JedisPubSub ,并实现其抽象方法,通过方法的名称很清楚的看出来,这个监听器是用来订阅一个频道,在订阅该频道,取消订阅,收到消息等状态会对应调用相关的方法

2.  订阅测试类

public class TestSubscribe {
    @Test
    public void testSubscribe() throws Exception{
        Jedis jedis = new Jedis("localhost");
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
        jedis.subscribe(listener, "redisChatTest");
        //other code
    }
}

该类实现对频道redisChatTest的订阅监听,频道的订阅,取消订阅,收到消息都会调用listener对象的对应方法

如果对Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构。感兴趣可以747981058,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

注意:subscribe是一个阻塞的方法,在取消订阅该频道前,会一直阻塞在这,只有当取消了订阅才会执行下面的other code,参考上面代码,我在onMessage里面收到消息后,调用了this.unsubscribe(); 来取消订阅,这样才会执行后面的other code

3.  发布消息测试类

Public class TestPublish {
    @Test
    public void testPublish() throws Exception{
        Jedis jedis = new Jedis("localhost");
        jedis.publish("redisChatTest", "Java架构技术交流");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "加入");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "747981058");
    }
}

这个类向频道redisChatTest发布消息,第二步因为订阅了该频道,所以会收到该消息。

(0)

相关推荐

  • java连接redis存取数据(详细)

    声明:本文章仅供参考,学无止境,若有不足之处请指出,非常感谢! 源代码+相关工具下载:https://download.csdn.net/download/corleone_4ever/1081125 ...

  • 面试官:生成订单 30 分钟未支付,则自动取消,该怎么实现?

    在开发中,往往会遇到一些关于延时任务的需求. 例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么这里就会产生一个问 ...

  • 消息队列和发布订阅

    编程语言集成了发布订阅 很多编程语言框架里都提供了发布订阅的组件,或者叫事件处理机制,而spring框架对这个功能也有支持,主要使用EventListener实现订阅,使用ApplicationEve ...

  • Java基于redis和mysql实现简单的秒杀(附demo)

    一.秒杀业务分析 所谓秒杀,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式.秒杀商品通常有两种限制:时间限制,库存限制,其中库存超卖问题是本教程的重点! 秒杀业务的运行流 ...

  • 最新消息!工信部发布60款侵害用户权益APP名单

    [最新消息!工信部发布60款侵害用户权益APP名单]10月26日,工信部向社会通报了131家存在侵害用户权益行为APP企业的名单.截至目前,尚有60款APP未按照要求完成整改.今日,工信部对该60款A ...

  • 小米8首个官方消息:深圳发布,将成全球首款结构光安卓手机

    小米官方在今早10点发布的信息只有五个字"定了,深圳见!",并且附带一张图,是深圳的标志性建筑--深圳京基100.虽然没说时间,但还像评价君此前推测的,必定是在5月底. 为什么是深 ...

  • ROS:消息发布器和订阅器(c++)

    学习资料主要源自http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 $ roscd beginner_t ...

  • 微信下线模板消息,订阅通知如何使用?

    背景 微信于今日宣布 <服务号模板消息能力调整>,原先的模板消息能力将于 2021 年 4 月 30 日 24:00 下线,届时将无法使用此接口发送模板消息. 简单来讲,向小程序开发看齐, ...

  • 重磅消息!最新版(2021-2022)CSSCI刊目录发布!

    2021年4月25日,南京大学中国社会科学研究评价中心在其主办的公众号部分发布了2021-2022年度CSSCI核心期刊目录. 这份在国内学术界具有举足轻重风向标意义的名单终于"靴子落地&q ...

  • 微信订阅号消息怎么永久关闭

    当我们使用微信的时候,关注了一些公众号,公众号每天都会推送订阅号里的文章,有的小伙伴很不喜欢.那微信订阅号消息怎么永久关闭. 1.打开微信app,进入需要设置的订阅号,点击右上角的头像图标. 2.点击 ...