I am doing something like this
public class ChannelCreator {
private Map<String , SubscribableChannel> channels;
ThreadPoolTaskExecutor executor;
public ChannelCreator() {
channels = new ConcurrentHashMap<String, SubscribableChannel>();
prepareAsyncExecutor();
}
public void createChannel(String login) {
PublishSubscribeChannel channel = new PublishSubscribeChannel(executor);
channels.put(login, channel);
}
public SubscribableChannel getChannel(String login){
SubscribableChannel channel = channels.get(login);
if(channel == null){
channel = new PublishSubscribeChannel(executor);
channels.put(login, channel);
}
return channel;
}
public void removeChannel(String login){
channels.remove(login);
}
public Executor prepareAsyncExecutor() {
executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(50);
executor.setQueueCapacity(10000);
executor.setThreadNamePrefix("ChannelExecutor-");
executor.initialize();
return executor;
}
}
and
@Configuration
public class ChannelConfig {
@Bean
public ChannelCreator channelCreator() {
ChannelCreator creator = new ChannelCreator();
return creator;
}
}