Ich hatte eine funktionierende Redis Pub-Sub-Konfiguration, wie im Spring-Boot-Redispub-Sub-Guide erklärt. HierWie konfiguriere ich einen zusätzlichen MessageListener für den RedisMessageListenerContainer, der von Spring Session bereitgestellt wird?
ist die Bean-Konfiguration für die RedisMessageListenerContainer
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new ChannelTopic("broadcast"));
return container;
}
Nun wollte ich Frühjahrssitzung verwenden, durch redis gesichert. Also habe ich eine Konfigurationsklasse wie folgt hinzugefügt.
@EnableRedisHttpSession
public class HttpSessionConfig {
}
Jetzt, da RedisHttpSessionConfig bereits eine RedisMessageListenerContainer definiert, erhalte ich diese Ausnahme auf Start.
Verursacht durch: org.springframework.beans.factory.NoUniqueBeanDefinitionException: Keine Warte Bean vom Typ [org.springframework.data.redis.listener.RedisMessageListenerContainer] definiert: Bohne Einzelanpassung erwartet, aber gefunden 2: Behälter, redisMessageListenerContainer
um das zu bekommen, ich die RedisMessageListenerContainer kommentieren Sie in meinem ApplicationConfig so definiert, dass es nur einen Behälter Bohne ist aber das Problem dann ist
Wie konfiguriere ich meine Zuhörer an den vorhandenen Behälter durch redisMessageListenerContainer bereitgestellt hinzufügen ?
Ok Ich konnte das Problem umgehen, indem ich das RedisMessageListenerContainer-Bean löschte und es als Methodenparameter in meine MessageListenerAdaper-Bean-Konfiguration einfügte.
@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;
}
Aber dies ist nicht eine saubere Lösung scheint, wie ich die RedisMessageListenerContainer Bohne aus dem Inneren der MessageListenerAdaper Bohne bin zu dekorieren. Irgendwelche besseren Ideen?
Bitte Snippets oder Links bereitstellen. Ohne das macht es keinen Sinn –