場景
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方法,就可以在前面的訂閱者的項目中收到消息了