@Configuration
public class RedisMessageConfig {

@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                               MessageListenerAdapter listenerAdapter){
    RedisMessageListenerContainer container = new RedisMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.addMessageListener(listenerAdapter,new PatternTopic("mytopic"));
    return container;
}

@Bean
public MessageListenerAdapter listenerAdapter() {
    return new MessageListenerAdapter(new Receiver(), "receiveMessage");
}

}

@Slf4j
public class Receiver {

public void receiveMessage(String message) {
    log.info("Received <" + message + ">");
}

}

其中"mytopic"相当于redis里面的channel频道, 客户端一直在监听这个频道。
打开redis客户端, 忘channel发送消息,注意返回值,返回值0代表没有监听者接收到消息,如果接收到消息则返回1
image.png

客户端接收到发布的消息
image.png

目前测试这个发布订阅遇到的坑点

  1. springboot整合的redis监听器老是过一段时间的失效而接收不到消息
  2. 由上面的原因 造成消息丢失

rookie_coder
9 声望1 粉丝