Redis中使用Java代码的方式实现发布订阅流程
場(chǎng)景
Redis中的發(fā)布與訂閱的概念與以命令行的方式實(shí)現(xiàn)發(fā)布訂閱舉例:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105042049
在上面了解了Redis的發(fā)布與訂閱的概念以及使用命令行的方式實(shí)現(xiàn)簡(jiǎn)單的發(fā)布與訂閱流程后,
在Java中怎樣實(shí)現(xiàn)發(fā)布與訂閱。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號(hào)
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費(fèi)下載。
實(shí)現(xiàn)
JedisPushSub類
Jedis中的JedisPubSub類是Jedis的一個(gè)抽象類,此類定義了public/subscribe的回調(diào)方法,通過(guò)繼承JedisPubSub類
重寫回調(diào)方法。實(shí)現(xiàn)java中Redis的發(fā)布訂閱。當(dāng)Redis發(fā)生發(fā)布或者訂閱的相關(guān)事件時(shí)會(huì)調(diào)用這些回調(diào)方法,只在
回調(diào)方法中實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。
onMessage():發(fā)布者發(fā)布消息時(shí),會(huì)執(zhí)行訂閱者的回調(diào)方法onMessage()接收發(fā)布的消息,在此方法實(shí)現(xiàn)消息接收后進(jìn)行
自定義的業(yè)務(wù)邏輯處理。
實(shí)現(xiàn)訂閱者
打開IDEA新建Maven項(xiàng)目,然后添加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方法
在回調(diào)方法onMessage中實(shí)現(xiàn)簡(jiǎn)單的輸出接受的消息和時(shí)間。
??? @Overridepublic void onMessage(String channel, String message) {SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd HH:mm:ss");System.out.println("訂閱者:訂閱頻道["+channel+"],收到消息["+message+"],時(shí)間:"+df.format(new Date()));}然后創(chuàng)建main方法,創(chuàng)建Jedis對(duì)象和訂閱者并訂閱頻道。
??? public static void main(String[] args) {System.out.println("啟動(dòng)訂閱者");//創(chuàng)建JedisJedis jedis = new Jedis("192.168.40.133", 6379);//創(chuàng)建訂閱者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 {@Overridepublic void onMessage(String channel, String message) {SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd HH:mm:ss");System.out.println("訂閱者:訂閱頻道["+channel+"],收到消息["+message+"],時(shí)間:"+df.format(new Date()));}public static void main(String[] args) {System.out.println("啟動(dòng)訂閱者");//創(chuàng)建JedisJedis jedis = new Jedis("192.168.40.133", 6379);//創(chuàng)建訂閱者RedisSubscriber redisSubscriber = new RedisSubscriber();//訂閱頻道jedis.subscribe(redisSubscriber,"badaodechengxvyuan");} }然后運(yùn)行main方法,啟動(dòng)該訂閱者。
?
參照上面以命令行的方式實(shí)現(xiàn)發(fā)布和訂閱的流程,在上面發(fā)布一個(gè)消息
我們就可以在此訂閱者中接收到消息了。
?
實(shí)現(xiàn)發(fā)布者
再次新建一個(gè)Maven項(xiàng)目,然后引入jedis的依賴,同上新建包和類
在類中新建main方法,然后發(fā)布消息
package com.badao.redis;import redis.clients.jedis.Jedis;public class Publisher {public static void main(String[] args) {System.out.println("開始發(fā)布......");//創(chuàng)建JedisJedis jedis = new Jedis("192.168.40.133", 6379);//發(fā)布消息jedis.publish("badaodechengxvyuan", "緊急通知:...");System.out.println("消息發(fā)送完畢......");} }然后運(yùn)行main方法,就可以在前面的訂閱者的項(xiàng)目中收到消息了
?
總結(jié)
以上是生活随笔為你收集整理的Redis中使用Java代码的方式实现发布订阅流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redis中的发布与订阅的概念与以命令行
- 下一篇: Redis中事务的实现流程