У меня была работающая конфигурация паба Redis, как объяснялось в вспомогательном гид-магазине redis pub spring.Как настроить дополнительный MessageListener в RedisMessageListenerContainer, предоставленный Spring Session?
Вот конфигурация боб для RedisMessageListenerContainer
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new ChannelTopic("broadcast"));
return container;
}
Теперь я хотел использовать весеннюю сессию поддержанный Redis. Итак, я добавил класс конфигурации как это.
@EnableRedisHttpSession
public class HttpSessionConfig {
}
Теперь, потому что RedisHttpSessionConfig уже определяет RedisMessageListenerContainer, я получаю это исключение при запуске.
Вызванный: org.springframework.beans.factory.NoUniqueBeanDefinitionException: Нет квалификационных фасоли типа [org.springframework.data.redis.listener.RedisMessageListenerContainer] не определен: ожидается, одного соответствия фасоли, но обнаружил 2: контейнер, redisMessageListenerContainer
чтобы обойти это, я закомментируйте redisMessageListenerContainer, определенные в моем ApplicationConfig так, что есть только один контейнер для кофейных зерен, но тогда проблема
Как настроить мой слушатель, чтобы добавить к существующему контейнеру, предоставленному redisMessageListenerContainer ?
ОК. Мне удалось решить проблему, удалив компонент RedisMessageListenerContainer и введя его как параметр метода в моей конфигурации компонента MessageListenerAdaper.
@Bean
MessageListenerAdapter listenerAdapter(RedisMessageListenerContainer container, PushNotificationsService receiver) {
MessageListenerAdapter listenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage");
listenerAdapter.setSerializer(new Jackson2JsonRedisSerializer<NotificationMessage>(NotificationMessage.class));
container.addMessageListener(listenerAdapter, new ChannelTopic("broadcast"));
return listenerAdapter;
}
Но это не кажется чистым решением, как я декорирование RedisMessageListenerContainer боба внутри MessageListenerAdaper фасоли. Любые лучшие идеи?
Просьба предоставить фрагменты или ссылки. Не имеет никакого смысла без этого –