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发布消息,第二步因为订阅了该频道,所以会收到该消息。

原文地址:https://www.cnblogs.com/nanaheidebk/p/11027586.html

时间: 2024-11-06 17:28:08

Java实现Redis的消息订阅和发布的相关文章

Redis的消息订阅及发布及事务机制

Redis的消息订阅及发布及事务机制 订阅发布 SUBSCRIBE PUBLISH 订阅消息队列及发布消息. # 首先要打开redis-cli shell窗口 一个用于消息发布 一个用于消息订阅 # SUBSCRIBE 订阅一个频道,如果频道不存在 就新增一个 # 返回参数 表示 第一个是命令 第二个是频道名称 第三个表示当前订阅该频道的数量 127.0.0.1:6379> SUBSCRIBE mychannel Reading messages... (press Ctrl-C to quit

websocket+nodejs+redis实现消息订阅和发布系统

其实我很懒,不想打字,代码已上传到码云,请点此处. 有疑问请一下扫描二维码,加我微信: 原文地址:https://www.cnblogs.com/don-yang/p/8931102.html

redis的消息订阅发布介绍

1.redis的消息订阅发布: 进程间的一种消息通信模式:发送者(pub)发送信息,订阅者(sub)接收信息. 注: 图1为 三个客户端 client2.client5.client1 通过 subscribe 命令订阅 频道 channel1 ,图二为 当有新消息通过 publish 命令发送给频道 channel1时,这个消息就会被发送给订阅它的三个客户端. 2.消息订阅发布的相关命令: PSUBSCRIBE pattern [pattern...]: 订阅一个或者多个符合给定模式的频道 P

redis事务和消息订阅与发布

开始事务:multi开启 exec结束 mutil后面的语句有两种情况 1.语法错误,exec的时候报错,所有的不能执行 2,语法本身没有错,但适用的对象有问题,会执行正确的语句,跳过不适的语句 3.discard 取消事务(在队列里面的都不执行) 4,watch key1 key2 key3 监控key,如果发生变化就不执行事务,控制数据的统一性 5,unwatch 取消监视 消息订阅与发布 publish key value  发布消息 subscribe key  订阅频道(只要订阅了频道

linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能

最近使用redis的c接口--hiredis,使客户端与redis服务器通信,实现消息订阅和发布(PUB/SUB)的功能,我把遇到的一些问题和解决方法列出来供大家学习. 废话不多说,先贴代码. redis_publisher.h /************************************************************************* > File Name: redis_publisher.h > Author: chenzengba > Ma

React:消息订阅(subscribe)-发布(publish)机制

使用消息订阅(subscribe)-发布(publish)机制 发布类似触发事件 订阅类似监听事件 使用这种方式的好处是,兄弟组件间通信不必再像使用props那种通过父组件来通信,多层组件之间通信也不必在一层一层的传递, 直接在触发事件的组件中一个发布消息 监听组件中订阅消息即可: 1) 工具库: PubSubJS 2) 下载: npm install pubsub-js --save 3) 使用: import PubSub from 'pubsub-js' //引入 PubSub.publi

基于Redis的消息订阅/发布

在工业生产设计中,我们往往需要实现一个基于消息订阅的模式,用来对非定时的的消息进行监听订阅. 这种设计模式在 总线设计模式中得到体现.微软以前的WCF中实现了服务总线 ServiceBus的设计模式.然并卵.WCF已经好像是上个世纪的产物................ 基于事件订阅的模式,比如 EventBus类的组件产品.但是往往设计比较复杂. 如果依赖于 Redis做事件消息推送.那就大大简化了这种设计模式,而且性能也比较客观. Redis在 2.0之后的版本中 实现了 事件推送的  pu

jedis实现redis的消息队列、发布对象消息、字节数组与字符串相互转换

redis支持发布/订阅的消息队列机制,jedis提供了java访问redis的客户端,本文将描述如何用jedis实现简单的消息队列,并传输对象. redis支持发布.订阅的功能,基本的命令有publish.subscribe等.在jedis中,有对应的java方法,并且只能发布字符串消息.为了传输对象,需要将对象进行序列化,并封装成字符串进行处理.将对象序列化后,只能成为字节流,如何封装成字符串是一个难点,具体可参考下面的代码. 实现三个类,一个对应publish.一个对应subscribe.

Java利用Redis实现消息队列

应用场景 为什么要用redis?二进制存储.java序列化传输.IO连接数高.连接频繁 一.序列化 这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成java对象; 主要是用到了ByteArrayOutputStream和ByteArrayInputStream; 注意:每个需要序列化的对象都要实现Serializable接口; 其代码如下: 1 package Utils; 2 import java.io.*; 3 /** 4 * Created