2016-07-11 7 views
0

스프링 부트 redis pub 하위 가이드에서 설명한대로 작동하는 Redis pub 하위 구성이 있습니다. 여기 Spring Session에서 제공하는 RedisMessageListenerContainer에 추가 MessageListener를 어떻게 구성합니까?

@Bean 
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, 
     MessageListenerAdapter listenerAdapter) { 

    RedisMessageListenerContainer container = new RedisMessageListenerContainer(); 
    container.setConnectionFactory(connectionFactory); 
    container.addMessageListener(listenerAdapter, new ChannelTopic("broadcast")); 
    return container; 
} 

가 지금은 레디 스의 지원 봄 세션을 활용하고 싶었 RedisMessageListenerContainer의 빈 구성입니다. 그래서 구성 클래스를 추가했습니다. RedisHttpSessionConfig 이미 RedisMessageListenerContainer을 정의하기 때문에

@EnableRedisHttpSession 
public class HttpSessionConfig { 

} 

지금, 나는 처음에이 예외를 얻고있다. 된 타입의 적격 빈이 [org.springframework.data.redis.listener.RedisMessageListenerContainer] 정의된다 : 하나의 정합 콩 예상되지만 2 발견 org.springframework.beans.factory.NoUniqueBeanDefinitionException :

에 의한 용기를 redisMessageListenerContainer

이 하나의 컨테이너 빈하지만 문제는 다음

가 어떻게 redisMessageListenerContainer에서 제공하는 기존의 컨테이너에 추가 내 수신기를 구성 할 수 있도록 그 해결하기 위해

, 내 ApplicationConfig에 정의 된 RedisMessageListenerContainer을 주석 ?

좋아요. RedisMessageListenerContainer 빈을 제거하고이를 내 MessageListenerAdaper 빈 구성의 메소드 매개 변수로 주입하여 문제를 해결할 수있었습니다. 나는 MessageListenerAdaper 빈 내부에서 RedisMessageListenerContainer 빈을 장식하고 같이

@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; 
} 

는 그러나 이것은 깨끗한 솔루션을하지 않는 것 같습니다. 더 좋은 아이디어가 있습니까?

답변

-1

RedisMessageListenerContainerredisMessageListenerContainer의 이름을 지정하여 스프링 세션의 RedisHttpSessionConfiguration에서 제공하는 RedisMessageListenerContainer 콩을 재정의 할 수 있습니다.

물론이 경우 필요한 bean을 message listeners으로 수동 구성하고 필요하면 RedisHttpSessionConfiguration#redisMessageListenerContainer의 다른 부분도 적용해야합니다.

+1

발췌 문장이나 링크를 제공하십시오. 그것 없이는 말이되지 않습니다. –