package com.innoq.mploed.ddd.customercontact; import com.innoq.mploed.ddd.customercontact.events.CreditApplicationApprovedEvent; import com.innoq.mploed.ddd.customercontact.events.CreditApplicationDeclinedEvent; import com.innoq.mploed.ddd.customercontact.events.CustomerCreatedEvent; import com.innoq.mploed.ddd.customercontact.receiver.CreditApplicationApprovedEventReceiver; import com.innoq.mploed.ddd.customercontact.receiver.CreditApplicationDeclinedEventReceiver; import com.innoq.mploed.ddd.customercontact.receiver.CustomerCreatedEventReceiver; 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 org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; @Configuration public class RedisConfiguration { @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, CreditApplicationApprovedEventReceiver applicationApprovedEventReceiver, CreditApplicationDeclinedEventReceiver applicationDeclinedEventReceiver, CustomerCreatedEventReceiver customerCreatedEventReceiver) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(creditApplicationApprovedMessageListener(applicationApprovedEventReceiver), new PatternTopic("credit-application-approved-events")); container.addMessageListener(creditApplicationDeclinedMessageListener(applicationDeclinedEventReceiver), new PatternTopic("credit-application-declined-events")); container.addMessageListener(customerCreatedMessageListener(customerCreatedEventReceiver), new PatternTopic("customer-created-events")); return container; } @Bean MessageListenerAdapter creditApplicationApprovedMessageListener(CreditApplicationApprovedEventReceiver receiver) { MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage"); messageListenerAdapter.setSerializer(new Jackson2JsonRedisSerializer<CreditApplicationApprovedEvent>(CreditApplicationApprovedEvent.class)); return messageListenerAdapter; } @Bean MessageListenerAdapter creditApplicationDeclinedMessageListener(CreditApplicationDeclinedEventReceiver receiver) { MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage"); messageListenerAdapter.setSerializer(new Jackson2JsonRedisSerializer<CreditApplicationDeclinedEvent>(CreditApplicationDeclinedEvent.class)); return messageListenerAdapter; } @Bean MessageListenerAdapter customerCreatedMessageListener(CustomerCreatedEventReceiver receiver) { MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage"); messageListenerAdapter.setSerializer(new Jackson2JsonRedisSerializer<CustomerCreatedEvent>(CustomerCreatedEvent.class)); return messageListenerAdapter; } }