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("*")));
|
}
|
}
|
}
|