Redis订阅监听没生效

在 Redis 中使用 redisTemplate.convertAndSend() 发送的消息,在 MessageListener 中没有收到。是因为未在 RedisMessageListenerContainer 中添加监听。

由于 RedisMessageListenerContainer 配置在 common 模块中,如果在 common 模块中引入业务模块中的监听类,会形成循环依赖。

一种解决办法是在 MessageListener 的构造函数中进行注册,可以避免循环依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Component
@Slf4j
public class MessageListener implements MessageListener {
@Autowired
private ObjectMapper objectMapper;

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public messageListener(RedisMessageListenerContainer listenerContainer) {
listenerContainer.addMessageListener(this, new PatternTopic(RedisKeyPrefix.CHANNEL));
log.info("Custom redis channel listener initialized.");
}

@Override
public void onMessage(Message message, byte[] pattern) {
// 业务逻辑
}
}