package com.qianwen.core.websocket.config; import javax.annotation.PostConstruct; import com.qianwen.core.websocket.distribute.MessageDistributor; import com.qianwen.core.websocket.distribute.RedisMessageDistributor; import com.qianwen.core.websocket.distribute.RedisWebsocketMessageListener; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @ConditionalOnClass({StringRedisTemplate.class}) @ConditionalOnProperty(prefix = WebSocketProperties.PREFIX, name = {"message-distributor"}, havingValue = MessageDistributorTypeConstants.REDIS, matchIfMissing = true) @Configuration(proxyBeanMethods = false) public class RedisMessageDistributorConfiguration { @ConditionalOnMissingBean({MessageDistributor.class}) @Bean public RedisMessageDistributor messageDistributor(StringRedisTemplate stringRedisTemplate) { return new RedisMessageDistributor(stringRedisTemplate); } @ConditionalOnMissingBean @ConditionalOnBean({RedisMessageDistributor.class}) @Bean public RedisWebsocketMessageListener redisWebsocketMessageListener(StringRedisTemplate stringRedisTemplate) { return new RedisWebsocketMessageListener(stringRedisTemplate); } @ConditionalOnMissingBean @ConditionalOnBean({RedisMessageDistributor.class}) @Bean public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { ThreadPoolTaskExecutor redisTaskExecutor = new ThreadPoolTaskExecutor(); redisTaskExecutor.setCorePoolSize(8); redisTaskExecutor.setMaxPoolSize(10000); redisTaskExecutor.setKeepAliveSeconds(60); redisTaskExecutor.setQueueCapacity(10000); redisTaskExecutor.setThreadNamePrefix("Spring websocket redis executor thread: "); redisTaskExecutor.initialize(); RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.setTaskExecutor(redisTaskExecutor); return container; } @ConditionalOnMissingBean({MessageDistributor.class}) @Configuration(proxyBeanMethods = false) /* loaded from: blade-starter-websocket-9.3.0.0-SNAPSHOT.jar:org/springblade/core/websocket/config/RedisMessageDistributorConfiguration$RedisMessageListenerRegisterConfiguration.class */ static class RedisMessageListenerRegisterConfiguration { private final RedisMessageListenerContainer redisMessageListenerContainer; private final RedisWebsocketMessageListener redisWebsocketMessageListener; public RedisMessageListenerRegisterConfiguration(final RedisMessageListenerContainer redisMessageListenerContainer, final RedisWebsocketMessageListener redisWebsocketMessageListener) { this.redisMessageListenerContainer = redisMessageListenerContainer; this.redisWebsocketMessageListener = redisWebsocketMessageListener; } @PostConstruct public void addMessageListener() { this.redisMessageListenerContainer.addMessageListener(this.redisWebsocketMessageListener, new PatternTopic(RedisWebsocketMessageListener.CHANNEL.concat("-").concat("*"))); } } }