千家信息网

Spring Boot中如何使用redis的发布和订阅模式

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇内容主要讲解"Spring Boot中如何使用redis的发布和订阅模式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Spring Boot中如何使用
千家信息网最后更新 2025年01月23日Spring Boot中如何使用redis的发布和订阅模式

本篇内容主要讲解"Spring Boot中如何使用redis的发布和订阅模式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Spring Boot中如何使用redis的发布和订阅模式"吧!

redis不仅是一个非常强大的非关系型数据库,它同时还拥有消息中间件的pub/sub功能,在spring boot中进行如下设置就可以使用redis的pub/sub功能:

1.创建redis监听的设置类

@Configurationpublic 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);    }}

2.创建监听之后的receiver方法类

[@Service](https://my.oschina.net/service)public class RedisReceiver {    @Autowired    RedisService redisService;    public void receiveMessage(String message) {        //这里是收到通道的消息之后执行的方法    }}

3.使用reidsTemplate向通道发送消息

@Servicepublic class RedisService {    @Autowired    private StringRedisTemplate stringRedisTemplate;  //向通道发送消息的方法    public void sendChannelMess(String channel, String message) {        stringRedisTemplate.convertAndSend(channel, message);    }}

附:有些设置在RedisReceiver接受类构造器中传入了CountDownLatch来控制线程,如果不需要控制线程可以不用。

举例

@Component@Slf4jpublic 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);        }    }}
@Componentpublic class MessageSender {    @Autowired    private StringRedisTemplate stringRedisTemplate;    public void sendMessage(Message message) {        stringRedisTemplate.convertAndSend(RedisConstant.TOPIC_KEY, JSON.toJSONString(message));    }}

到此,相信大家对"Spring Boot中如何使用redis的发布和订阅模式"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0