В моем проекте у меня следующая конфигурация:
@Configuration
public class BusConfiguration{
@Bean
public RedisMessageListenerContainer messageListenerContainer(RedisConnectionFactory eventBusConnectionFactory,List<MyAbstractListener> listeners ) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(eventBusConnectionFactory);
// container.setTaskExecutor(eventBusPoolExecutor); <--need this
// container.setSubscriptionExecutor(eventBusPoolExecutor); <--need this
listeners.forEach( listener -> container.addMessageListener(new MessageListenerAdapter(listener), listener.getTopic()));
container.start(); <--breaks!
return container;
}
}
Кажется, что если я явно не устанавливаю исполнитель задачи и исполнитель подписки, метод start () прерывается с исключением нулевого указателя. Я проверил код, и кажется, что исполнитель подписки пуст, однако, просмотрев документацию по redis, он должен по умолчанию использовать Spring SimpleAsyncTaskExecutor.
Это похоже на то, что этот исполнитель еще не готов ...