本篇内容主要讲解“Spring Boot中如何使用redis的发布和订阅模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Boot中如何使用redis的发布和订阅模式”吧!
redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在spring boot中进行如下设置就可以使用redis的pub/sub功能:
@Configuration
public class RedisSubListenerConfig {
//初始化监听器
[@Bean](https://my.oschina.net/bean)
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("这里是监听的通道的名字"));
return container;
}
//利用反射来创建监听到消息之后的执行方法
[@Bean](https://my.oschina.net/bean)
MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
return new MessageListenerAdapter(redisReceiver, "receiveMessage");
}
//使用默认的工厂初始化redis操作模板
[@Bean](https://my.oschina.net/bean)
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
}
[@Service](https://my.oschina.net/service)
public class RedisReceiver {
@Autowired
RedisService redisService;
public void receiveMessage(String message) {
//这里是收到通道的消息之后执行的方法
}
}
@Service
public class RedisService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
//向通道发送消息的方法
public void sendChannelMess(String channel, String message) {
stringRedisTemplate.convertAndSend(channel, message);
}
}
附:有些设置在RedisReceiver接受类构造器中传入了CountDownLatch来控制线程,如果不需要控制线程可以不用。
举例
@Component
@Slf4j
public class MessageReceiver {
@Autowired
ISocketService socketService;
/**接收消息的方法
* @throws Exception */
public void receiveMessage(String message) throws Exception {
log.info("收到一条消息From Redis:" + message);
Message msg = JSON.parseObject(message, Message.class);
if (null == msg.getAction()) {
throw new Exception("必须设置客户端收到消息后需要执行的动作");
}
if (null == msg.getTableId() || "".equals(msg.getTableId())) {
throw new Exception("必须设置接收消息的桌码!");
}
if (msg.getAction().equals(Event.NOTICEOTHER)) {
NoticeOtherDto noticeOtherDto = JSON.parseObject(msg.getData().toString(), NoticeOtherDto.class);
msg.setData(noticeOtherDto.getData());
socketService.noticeOther(msg.getTenantId() + "-" + msg.getTableId(), noticeOtherDto.getEventName(), msg);
} else {
// 通过WebSocket群发消息
socketService.sendMessageToTable(msg.getTenantId() + "-" + msg.getTableId(), msg.getAction(), msg);
}
}
}
@Component
public class MessageSender {
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void sendMessage(Message message) {
stringRedisTemplate.convertAndSend(RedisConstant.TOPIC_KEY, JSON.toJSONString(message));
}
}
到此,相信大家对“Spring Boot中如何使用redis的发布和订阅模式”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/dsadsdgfdsafas/blog/3092826