博文首发地址:https://blog.virde.xyz

SpringBoot中使用Redis的订阅发布

原文见:https://blog.virde.xyz/archives/springboot-zhong-shi-yong-redis-de-ding-yue-fa-bu

步骤

pom.xml引入redis依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.properties中添加redis配置

spring.redis.host=127.0.0.1
spring.redis.password=mypassword
spring.redis.ssl=false
spring.redis.port=6379
spring.redis.timeout=10000ms

添加Configuration

@Configuration
public class RedisPublicChannelConfiguration {
    @Bean
    public RedisMessageListenerContainer container(
            RedisConnectionFactory connectionFactory,
            Map<String,MessageListenerAdapter> adapterMap) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        adapterMap.keySet().forEach(topic->{
            container.addMessageListener(adapterMap.get(topic),new PatternTopic(topic));
        });
        return container;
    }
}

添加Redis订阅

@Slf4j
@Component("PUBLIC_TOPIC_WEB")
public class RedisWebPublicChannelReceiver extends MessageListenerAdapter {

    public void handleMessage(String message) {
        log.info("Message:{}",message);
    }

}

测试效果

启动项目,在redis中使用命令行:PUBLISH PUBLIC_TOPIC_WEB Hello 发布订阅通知。

说明:

  • RedisWebPublicChannelReceiver的Component注解名字是Redis订阅的Key。
  • MessageListenerAdapter的实现类会通过Spring自动注入到adapterMap变量,之后通过container方法注册。
  • handleMessage(String message)方法名不能改成别的,只能是这个名字。因为MessageListenerAdapter中的defaultListenerMethod="handleMessage"

91973981_p1

posted @ 2021-11-09 15:50  黑风风  阅读(486)  评论(0)    收藏  举报

博文首发地址:https://blog.virde.xyz