diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisMessageConfiguration.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisMessageConfiguration.java new file mode 100644 index 000000000..4ccdde416 --- /dev/null +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/cache/RedisMessageConfiguration.java @@ -0,0 +1,26 @@ +package com.pig4cloud.pigx.common.data.cache; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; + +/** + * @author lengleng + * @date 2022/2/4 + * + * redis message 信道相关配置 + */ +@Configuration(proxyBeanMethods = false) +public class RedisMessageConfiguration { + + @Bean + @ConditionalOnMissingBean + public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(redisConnectionFactory); + return container; + } + +} diff --git a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories index 3ec872b65..1e6cfcfda 100644 --- a/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-data/src/main/resources/META-INF/spring.factories @@ -1,5 +1,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.data.cache.RedisTemplateConfig,\ + com.pig4cloud.pigx.common.data.cache.RedisMessageConfiguration,\ com.pig4cloud.pigx.common.data.cache.RedisCacheManagerConfig,\ com.pig4cloud.pigx.common.data.cache.RedisCacheAutoConfiguration,\ com.pig4cloud.pigx.common.data.tenant.PigxTenantConfigProperties,\ diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/ClientDetailsInitRunner.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/ClientDetailsInitRunner.java index 58f45cf4a..80b26d144 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/ClientDetailsInitRunner.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/ClientDetailsInitRunner.java @@ -7,11 +7,14 @@ import com.pig4cloud.pigx.common.core.constant.CacheConstants; import com.pig4cloud.pigx.common.data.tenant.TenantBroker; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.EventListener; import org.springframework.core.annotation.Order; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -25,10 +28,12 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor @SuppressWarnings("all") -public class ClientDetailsInitRunner { +public class ClientDetailsInitRunner implements InitializingBean { private final SysOauthClientDetailsService clientDetailsService; + private final RedisMessageListenerContainer listenerContainer; + private final SysTenantService tenantService; private final RedisTemplate redisTemplate; @@ -68,4 +73,15 @@ public class ClientDetailsInitRunner { } + /** + * redis 监听配置,监听 upms_redis_client_reload_topic,重新加载Redis + */ + @Override + public void afterPropertiesSet() throws Exception { + listenerContainer.addMessageListener((message, bytes) -> { + log.warn("接收到重新Redis 重新加载客户端配置事件"); + initClientDetails(); + }, new ChannelTopic(CacheConstants.CLIENT_REDIS_RELOAD_TOPIC)); + } + } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java index 39b2e25a7..0155ca873 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/config/DynamicRouteInitRunner.java @@ -23,16 +23,15 @@ import com.pig4cloud.pigx.admin.service.SysRouteConfService; import com.pig4cloud.pigx.common.core.constant.CacheConstants; import com.pig4cloud.pigx.common.gateway.support.DynamicRouteInitEvent; import com.pig4cloud.pigx.common.gateway.vo.RouteDefinitionVo; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.cloud.gateway.filter.FilterDefinition; import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.EventListener; import org.springframework.core.annotation.Order; -import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; @@ -50,13 +49,15 @@ import java.util.Map; */ @Slf4j @Configuration -@AllArgsConstructor -public class DynamicRouteInitRunner { +@RequiredArgsConstructor +public class DynamicRouteInitRunner implements InitializingBean { private final RedisTemplate redisTemplate; private final SysRouteConfService routeConfService; + private final RedisMessageListenerContainer listenerContainer; + @Async @Order @EventListener({ WebServerInitializedEvent.class, DynamicRouteInitEvent.class }) @@ -87,19 +88,14 @@ public class DynamicRouteInitRunner { } /** - * redis 监听配置,监听 gateway_redis_route_reload_topic,重新加载Redis - * @param redisConnectionFactory redis 配置 - * @return + * redis 监听配置,监听 upms_redis_route_reload_topic,重新加载Redis */ - @Bean - public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory) { - RedisMessageListenerContainer container = new RedisMessageListenerContainer(); - container.setConnectionFactory(redisConnectionFactory); - container.addMessageListener((message, bytes) -> { + @Override + public void afterPropertiesSet() { + listenerContainer.addMessageListener((message, bytes) -> { log.warn("接收到重新Redis 重新加载路由事件"); initRoute(); }, new ChannelTopic(CacheConstants.ROUTE_REDIS_RELOAD_TOPIC)); - return container; } }