场景
Redis中的发布与订阅的概念与以命令行的方式实现发布订阅举例:
在上面了解了Redis的发布与订阅的概念以及使用命令行的方式实现简单的发布与订阅流程后,
在Java中怎样实现发布与订阅。
注:
实现
JedisPushSub类
Jedis中的JedisPubSub类是Jedis的一个抽象类,此类定义了public/subscribe的回调方法,通过继承JedisPubSub类
重写回调方法。实现java中Redis的发布订阅。当Redis发生发布或者订阅的相关事件时会调用这些回调方法,只在
回调方法中实现自己的业务逻辑。
onMessage():发布者发布消息时,会执行订阅者的回调方法onMessage()接收发布的消息,在此方法实现消息接收后进行
自定义的业务逻辑处理。
实现订阅者
打开IDEA新建Maven项目,然后添加jedis的依赖
redis.clients
jedis
3.0.1
然后在test新建包,包下新建Java类RedisSubscriber
然后使其继承JedisPubSub并重写onMessage方法
在回调方法onMessage中实现简单的输出接受的消息和时间。
@Overridepublic voidonMessage(String channel, String message) {
SimpleDateFormat df= new SimpleDateFormat("yyyy MM dd HH:mm:ss");
System.out.println("订阅者:订阅频道["+channel+"],收到消息["+message+"],时间:"+df.format(newDate()));
}
然后创建main方法,创建Jedis对象和订阅者并订阅频道。
public static voidmain(String[] args) {
System.out.println("启动订阅者");//创建Jedis
Jedis jedis = new Jedis("192.168.40.133", 6379);//创建订阅者
RedisSubscriber redisSubscriber = newRedisSubscriber();//订阅频道
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 classRedisSubscriber extends JedisPubSub {
@Overridepublic voidonMessage(String channel, String message) {
SimpleDateFormat df= new SimpleDateFormat("yyyy MM dd HH:mm:ss");
System.out.println("订阅者:订阅频道["+channel+"],收到消息["+message+"],时间:"+df.format(newDate()));
}public static voidmain(String[] args) {
System.out.println("启动订阅者");//创建Jedis
Jedis jedis = new Jedis("192.168.40.133", 6379);//创建订阅者
RedisSubscriber redisSubscriber = newRedisSubscriber();//订阅频道
jedis.subscribe(redisSubscriber,"badaodechengxvyuan");
}
}
然后运行main方法,启动该订阅者。
参照上面以命令行的方式实现发布和订阅的流程,在上面发布一个消息
我们就可以在此订阅者中接收到消息了。
实现发布者
再次新建一个Maven项目,然后引入jedis的依赖,同上新建包和类
在类中新建main方法,然后发布消息
package com.badao.redis;
import redis.clients.jedis.Jedis;public classPublisher {public static voidmain(String[] args) {
System.out.println("开始发布......");//创建Jedis
Jedis jedis = new Jedis("192.168.40.133", 6379);//发布消息
jedis.publish("badaodechengxvyuan", "紧急通知:...");
System.out.println("消息发送完毕......");
}
}
然后运行main方法,就可以在前面的订阅者的项目中收到消息了