1. 程式人生 > 其它 >Redis 釋出訂閱功能 java Spring

Redis 釋出訂閱功能 java Spring

 

1|0一、Redis 中的釋出訂閱功能

 

 

 

與 Redis 釋出訂閱相關的命令有 6 個,分別如下:

  • PSUBSCRIBE pattern [pattern …]:訂閱一個或者多個符合pattern格式的頻道

  • PUBLISH channel message:釋出訊息到chanel中

  • PUBSUB subcommand [argument [argument …]]:檢視訂閱與釋出系統狀態

  • PUNSUBSCRIBE [pattern [pattern …]]:退訂所有符合格式的頻道

  • SUBSCRIBE channel [channel …]:訂閱一個或者多個頻道

  • UNSUBSCRIBE [channel [channel …]]:取消訂閱頻道

 

而在 Jedis 中,也提供了一個類 JedisPubSub,用來對訂閱的 channel 進行監聽。

  • onPMessage:監聽到訂閱模式接受到訊息時的回撥

  • onMessage:監聽到訂閱頻道接受到訊息時的回撥

  • onSubscribe:訂閱頻道時的回撥

  • onUnsubscribe:取消訂閱頻道時的回撥

  • onPSubscribe:訂閱頻道模式時的回撥

  • onPUnsubscribe:取消訂閱模式時的回撥

 

2|0二、專案具體實現

1. POM依賴包

<dependency
>
<groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.1.0</version> </dependency>

 

2.訊息推送

package com.zyu.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis; /** * @Auther: zyu * @Date: 2020/4/29 10:18 * @Description: 釋出訂閱 SUB端 */ @RestController public class SubController { @GetMapping("/sub") public String messageSub(String message) { Jedis jedis = new Jedis(); try{ //傳送廣播 jedis.publish("redisChat", message); }catch(Exception e){ e.printStackTrace(); }finally{ jedis.close(); } return "SUCCESS"; } }

 

3.訊息接收

package com.zyu.task;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
/**
 * @Auther: zyu
 * @Date: 2020/4/29 09:03
 * @Description: Redis訊息監聽
 */
@Component
public class Receiver {
public void receiveMessage() {
        Jedis jedis = new Jedis();
        JedisPubSub jedisPubSub = new JedisPubSub() {
/**
             * 監聽到訂閱頻道接受到訊息時的回撥
             * @param channel   頻道
             * @param message   訊息
             */
@Override
public void onMessage(String channel, String message) {
                System.out.println("Channel:" + channel);
                System.out.println("Message:" + message);
            }
/**
             * 監聽到訂閱模式接受到訊息時的回撥
             * @param pattern
             * @param channel
             * @param message
             */
@Override
public void onPMessage(String pattern, String channel, String message) {
// TODO Auto-generated method stub
                System.out.println(pattern + "," + channel + "," + message);
            }
/**
             * 訂閱頻道時的回撥
             * @param channel
             * @param subscribedChannels
             */
@Override
public void onSubscribe(String channel, int subscribedChannels) {
// TODO Auto-generated method stub
                System.out.println("onSubscribe: channel[" + channel + "]," + "subscribedChannels[" + subscribedChannels + "]");
            }
/**
             * 取消訂閱頻道時的回撥
             * @param channel
             * @param subscribedChannels
             */
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
// TODO Auto-generated method stub
                System.out.println(
"onUnsubscribe: channel[" + channel + "], " + "subscribedChannels[" + subscribedChannels + "]");
            }
/**
             * 取消訂閱模式時的回撥
             * @param pattern
             * @param subscribedChannels
             */
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
// TODO Auto-generated method stub
                System.out.println("onPUnsubscribe: pattern[" + pattern + "]," +
"subscribedChannels[" + subscribedChannels + "]");
            }
/**
             * 訂閱頻道模式時的回撥
             * @param pattern
             * @param subscribedChannels
             */
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
                System.out.println("onPSubscribe: pattern[" + pattern + "], " +
"subscribedChannels[" + subscribedChannels + "]");
            }
        };
// 訂閱一個或者多個符合pattern格式的頻道
        String[] channels = {"redisChat"};
        jedis.subscribe(jedisPubSub, channels);
    }
}





 

4.Spring容器初始化時,將監聽類注入

package com.zyu;
import com.zyu.task.Receiver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class SpringbootRedisApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(SpringbootRedisApplication.class, args);
        run.getBean(Receiver.class).receiveMessage();
    }
}





 


__EOF__

本文作者橘子味兒的貓
本文連結https://www.cnblogs.com/zyulike/p/12801165.html
關於博主:評論和私信會在第一時間回覆。或者直接私信我。
版權宣告:本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是博主的最大動力!

 

1|0一、Redis 中的釋出訂閱功能

 

 

 

與 Redis 釋出訂閱相關的命令有 6 個,分別如下:

  • PSUBSCRIBE pattern [pattern …]:訂閱一個或者多個符合pattern格式的頻道

  • PUBLISH channel message:釋出訊息到chanel中

  • PUBSUB subcommand [argument [argument …]]:檢視訂閱與釋出系統狀態

  • PUNSUBSCRIBE [pattern [pattern …]]:退訂所有符合格式的頻道

  • SUBSCRIBE channel [channel …]:訂閱一個或者多個頻道

  • UNSUBSCRIBE [channel [channel …]]:取消訂閱頻道

 

而在 Jedis 中,也提供了一個類 JedisPubSub,用來對訂閱的 channel 進行監聽。

  • onPMessage:監聽到訂閱模式接受到訊息時的回撥

  • onMessage:監聽到訂閱頻道接受到訊息時的回撥

  • onSubscribe:訂閱頻道時的回撥

  • onUnsubscribe:取消訂閱頻道時的回撥

  • onPSubscribe:訂閱頻道模式時的回撥

  • onPUnsubscribe:取消訂閱模式時的回撥

 

2|0二、專案具體實現

1. POM依賴包

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>





 

2.訊息推送

package com.zyu.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
/**
 * @Auther: zyu
 * @Date: 2020/4/29 10:18
 * @Description:   釋出訂閱 SUB端
 */
@RestController
public class SubController {
@GetMapping("/sub")
public String messageSub(String message) {
        Jedis jedis = new Jedis();
try{
//傳送廣播
            jedis.publish("redisChat", message);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            jedis.close();
        }
return "SUCCESS";
    }
}





 

3.訊息接收

package com.zyu.task;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
/**
 * @Auther: zyu
 * @Date: 2020/4/29 09:03
 * @Description: Redis訊息監聽
 */
@Component
public class Receiver {
public void receiveMessage() {
        Jedis jedis = new Jedis();
        JedisPubSub jedisPubSub = new JedisPubSub() {
/**
             * 監聽到訂閱頻道接受到訊息時的回撥
             * @param channel   頻道
             * @param message   訊息
             */
@Override
public void onMessage(String channel, String message) {
                System.out.println("Channel:" + channel);
                System.out.println("Message:" + message);
            }
/**
             * 監聽到訂閱模式接受到訊息時的回撥
             * @param pattern
             * @param channel
             * @param message
             */
@Override
public void onPMessage(String pattern, String channel, String message) {
// TODO Auto-generated method stub
                System.out.println(pattern + "," + channel + "," + message);
            }
/**
             * 訂閱頻道時的回撥
             * @param channel
             * @param subscribedChannels
             */
@Override
public void onSubscribe(String channel, int subscribedChannels) {
// TODO Auto-generated method stub
                System.out.println("onSubscribe: channel[" + channel + "]," + "subscribedChannels[" + subscribedChannels + "]");
            }
/**
             * 取消訂閱頻道時的回撥
             * @param channel
             * @param subscribedChannels
             */
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
// TODO Auto-generated method stub
                System.out.println(
"onUnsubscribe: channel[" + channel + "], " + "subscribedChannels[" + subscribedChannels + "]");
            }
/**
             * 取消訂閱模式時的回撥
             * @param pattern
             * @param subscribedChannels
             */
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
// TODO Auto-generated method stub
                System.out.println("onPUnsubscribe: pattern[" + pattern + "]," +
"subscribedChannels[" + subscribedChannels + "]");
            }
/**
             * 訂閱頻道模式時的回撥
             * @param pattern
             * @param subscribedChannels
             */
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
                System.out.println("onPSubscribe: pattern[" + pattern + "], " +
"subscribedChannels[" + subscribedChannels + "]");
            }
        };
// 訂閱一個或者多個符合pattern格式的頻道
        String[] channels = {"redisChat"};
        jedis.subscribe(jedisPubSub, channels);
    }
}





 

4.Spring容器初始化時,將監聽類注入

package com.zyu;
import com.zyu.task.Receiver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class SpringbootRedisApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(SpringbootRedisApplication.class, args);
        run.getBean(Receiver.class).receiveMessage();
    }
}





 


__EOF__

本文作者橘子味兒的貓
本文連結https://www.cnblogs.com/zyulike/p/12801165.html
關於博主:評論和私信會在第一時間回覆。或者直接私信我。
版權宣告:本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是博主的最大動力!