1. 程式人生 > 其它 >SpringBoot中使用Redis的訂閱釋出

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"