因为某些原因,需要将flask搭建的项目用spring boot重构一遍,其中有一个聊天室的功能,在flask下我采用了flask-sse这个第三方库来实现,该模块采用基于redis的消息订阅系统实现,当然类spring boot下自然没有这个方便的库了,但是spring boot对redis的消息机制的支持还是不错的,所以在看了下相关文档后我觉得可以自己实现一个,接下来就是思路和具体步骤了
参考文档: http://spring.io/guides/gs/messaging-redis/
废话不多说,上代码
配置类
@Configuration
public class RedisConf {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
@Bean
Receiver receiver() {
return new Receiver();
}
@Bean("channelMap")
Map<String, List<SseEmitter>> channelMap(){
return new ConcurrentHashMap<String, List<SseEmitter>>();
}
}
该类注入了一些必要的实例,顺便说一句,默认情况下,spring的注入是单例模式。
接下来是receiver类,该类接收到redis发送的消息,并且发布给相应的频道中的所有人,该