From f7eaeb0f7d598c45d83f2904ed03b73331691622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=A2=A6=E6=8A=80=E6=9C=AF?= <596392912@qq.com> Date: Mon, 12 May 2025 09:15:13 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20blade-starter-redis=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20pub=20sub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/config/RedisPubSubConfiguration.java | 8 +++----- .../redis/pubsub/RPubSubListenerDetector.java | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/blade-starter-redis/src/main/java/org/springblade/core/redis/config/RedisPubSubConfiguration.java b/blade-starter-redis/src/main/java/org/springblade/core/redis/config/RedisPubSubConfiguration.java index 90d89be..7ab9f77 100644 --- a/blade-starter-redis/src/main/java/org/springblade/core/redis/config/RedisPubSubConfiguration.java +++ b/blade-starter-redis/src/main/java/org/springblade/core/redis/config/RedisPubSubConfiguration.java @@ -23,8 +23,8 @@ import org.springblade.core.redis.pubsub.RPubSubListenerLazyFilter; import org.springblade.core.redis.pubsub.RPubSubPublisher; import org.springblade.core.redis.pubsub.RedisPubSubPublisher; import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.RedisMessageListenerContainer; @@ -53,10 +53,8 @@ public class RedisPubSubConfiguration { } @Bean - @ConditionalOnBean(RedisSerializer.class) - public static RPubSubListenerDetector topicListenerDetector(RedisMessageListenerContainer redisMessageListenerContainer, - RedisSerializer redisSerializer) { - return new RPubSubListenerDetector(redisMessageListenerContainer, redisSerializer); + public static RPubSubListenerDetector topicListenerDetector(ApplicationContext applicationContext) { + return new RPubSubListenerDetector(applicationContext); } @Bean diff --git a/blade-starter-redis/src/main/java/org/springblade/core/redis/pubsub/RPubSubListenerDetector.java b/blade-starter-redis/src/main/java/org/springblade/core/redis/pubsub/RPubSubListenerDetector.java index 4fbc0d1..67cba87 100644 --- a/blade-starter-redis/src/main/java/org/springblade/core/redis/pubsub/RPubSubListenerDetector.java +++ b/blade-starter-redis/src/main/java/org/springblade/core/redis/pubsub/RPubSubListenerDetector.java @@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.ReflectUtil; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.Topic; @@ -39,8 +40,7 @@ import java.lang.reflect.Method; @Slf4j @RequiredArgsConstructor public class RPubSubListenerDetector implements BeanPostProcessor { - private final RedisMessageListenerContainer redisMessageListenerContainer; - private final RedisSerializer redisSerializer; + private final ApplicationContext applicationContext; @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { @@ -59,6 +59,10 @@ public class RPubSubListenerDetector implements BeanPostProcessor { } // 精准模式和模糊匹配模式 Topic topic = ChannelUtil.getTopic(channel); + // 获取参数 + RedisMessageListenerContainer redisMessageListenerContainer = getRedisMessageListenerContainer(); + RedisSerializer redisSerializer = getRedisSerializer(); + // 添加到监听器处理 redisMessageListenerContainer.addMessageListener((message, pattern) -> { String messageChannel = new String(message.getChannel()); Object body = redisSerializer.deserialize(message.getBody()); @@ -78,4 +82,11 @@ public class RPubSubListenerDetector implements BeanPostProcessor { } } + private RedisMessageListenerContainer getRedisMessageListenerContainer() { + return applicationContext.getBean(RedisMessageListenerContainer.class); + } + + private RedisSerializer getRedisSerializer() { + return applicationContext.getBean(RedisSerializer.class); + } }