Spring Boot 整合 Redis消息订阅与发布
2021-02-03 16:19
标签:inf auth tco ges desc depend class nps isa 与 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:取消订阅模式时的回调 1. POM依赖包 2.消息推送 3.消息接收 4.Spring容器初始化时,将监听类注入 Spring Boot 整合 Redis消息订阅与发布 标签:inf auth tco ges desc depend class nps isa 原文地址:https://www.cnblogs.com/zyulike/p/12801165.html一、Redis 中的发布订阅功能
二、项目具体实现
dependency>
groupId>redis.clientsgroupId>
artifactId>jedisartifactId>
version>3.1.0version>
dependency>
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";
}
}
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);
}
}
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();
}
}
文章标题:Spring Boot 整合 Redis消息订阅与发布
文章链接:http://soscw.com/index.php/essay/50493.html