package de.codecentric.moviedatabase.shop.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.codecentric.moviedatabase.shop.event.MovieReceiver;
import de.codecentric.moviedatabase.shop.repositories.MovieRepository;
@Configuration
public class ApplicationConfiguration {
@Autowired
private MovieRepository movieRepository;
@Autowired
private ObjectMapper objectMapper;
@Bean
public MovieReceiver receiver(){
return new MovieReceiver(movieRepository, objectMapper);
}
@Bean
public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic("movieChannel"));
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(MovieReceiver receiver) {
return new MessageListenerAdapter(receiver, "receive");
}
}