使用spring boot集成redis,实现消息队列的订阅发布。
在我的订阅端,我自定义了一个实现了MessageListener
接口的类,然后使用如下代码进行配置
@Configuration
public class RedisConfig {
@Value("${spring.redis.listener}")
private String channelName;
@Autowired
private RedisListener redisListener;
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory factory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(factory);
// 订阅通道
container.addMessageListener(redisListener, new PatternTopic(channelName));
return container;
}
/**
* 配置RedisTemplate,解决乱码问题
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// string序列化方式
RedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
// 设置默认序列化方式
template.setDefaultSerializer(serializer);
template.setKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
@Bean
public GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
但是进行测试的时候发现,这个方法添加的redis订阅消息监听器,每次监听到消息都要开启一个新的线程。
请问有没有办法让这个监听线程单线程执行,即我当前的spring boot项目只有spring boot自带的线程和我定义的监听消息线程。