赞
踩
打开两个窗口,打开redis客户端:
一个客户端:订阅(客户端订阅channel1频道):127.0.0.1:6379> subscribe channel1
另一个客户端:发布(客户端向channel1频道发送消息hello):127.0.0.1:6379> publish channel1 hello
- /**
- * 订阅消息处理类
- *
- * @version 1.0
- * @date 2022/05/26 15:51:11
- */
- public class Subscriber extends JedisPubSub {
-
- public Subscriber(){
- }
- //收到消息会调用
- @Override
- public void onMessage(String channel, String message) {
- System.out.println("接收 redis 发布的消息, 频道为:" + channel + ", 消息内容是:" + message);
- }
-
- //订阅了频道会调用
- @Override
- public void onSubscribe(String channel, int subscribedChannels) {
- System.out.println("订阅 redis 频道成功, 频道是:" + channel + ", 订阅频道数量是:" + subscribedChannels);
- }
-
- //取消订阅 会调用
- @Override
- public void onUnsubscribe(String channel, int subscribedChannels) {
- System.out.println("取消订阅 redis 频道,频道:" + channel + ", 订阅频道:" + subscribedChannels);
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- /**
- * 消息的发布者
- *
- * @version 1.0
- * @date 2022/05/26 15:43:06
- */
- public class SmsPublisher extends Thread {
-
- private final JedisPool jedisPool;
-
- public SmsPublisher(JedisPool jedisPool) {
- this.jedisPool = jedisPool;
- }
-
- @Override
- public void run() {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- //连接池中取出一个连接
- Jedis jedis = jedisPool.getResource();
- while (true) {
- try {
- //向 xyzChannel 的频道上推送消息
- Long smsNumber = jedis.publish("xyzChannel", reader.readLine());
- System.out.println("消息的发布者:发布成功,当前向xyzChannel频道发送的消息数量为:" + smsNumber);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- /**
- * 消息订阅者
- *
- * @version 1.0
- * @date 2022/05/26 15:49:47
- */
- public class SmsSubscriber extends Thread{
-
- private final JedisPool jedisPool;
- private final Subscriber subscriber = new Subscriber();
- //频道
- private final String channel = "xyzChannel";
-
- public SmsSubscriber(JedisPool jedisPool) {
- super("SmsSubscriber");
- this.jedisPool = jedisPool;
- }
-
- @Override
- public void run() {
- System.out.println("订阅Redis频道,频道为:" + channel + ", 等待消息发送者发送消息(请在控制台输入消息内容)...");
- Jedis jedis = null;
- try {
- //取出一个连接
- jedis = jedisPool.getResource();
- //通过subscribe的api去订阅频道,入参是订阅者和频道名
- jedis.subscribe(subscriber, channel);
- } catch (Exception e) {
- System.out.println("消息订阅者订阅消息出现异常: " + e.getMessage());
- } finally {
- if (jedis != null) {
- jedis.close();
- }
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
- /**
- * Redis消息的发布和订阅测试类
- *
- * @version 1.0
- * @date 2022/05/26 16:01:56
- */
- public class SmsTest {
- public static void main(String[] args) {
- // 连接本地redis服务端
- JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);
- //消息的发布者
- SmsPublisher publisher = new SmsPublisher(jedisPool);
- publisher.start();
-
- //消息的订阅者
- SmsSubscriber subscriber = new SmsSubscriber(jedisPool);
- subscriber.start();
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。