+ KafkaConsumer<String, String> consumer(TransferServiceProperties properties)
+ {
+ Properties props = new Properties();
+ props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, properties.bootstrapServers);
+ props.put(ConsumerConfig.GROUP_ID_CONFIG, properties.groupId);
+ props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
+ props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
+ props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
+ props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
+
+ return new KafkaConsumer<>(props);
+ }
+
+ @Bean(destroyMethod = "shutdown")
+ TransferConsumer transferConsumer(
+ TransferServiceProperties properties,
+ KafkaConsumer<String, String> consumer,
+ ObjectMapper mapper,
+ TransferService productionTransferService,
+ TransferService restoreTransferService)
+ {
+ return
+ new TransferConsumer(
+ properties.topic,
+ consumer,
+ mapper,
+ new TransferConsumer.ConsumerUseCases() {
+ @Override
+ public void create(Long id, Long payer, Long payee, Integer amount)
+ {
+ productionTransferService.create(id, payer, payee, amount);
+ }
+
+ @Override
+ public Optional<Transfer> get(Long id)
+ {
+ return productionTransferService.get(id);
+ }
+
+ @Override
+ public void handleStateChange(Long id, Transfer.State state)
+ {
+ productionTransferService.handleStateChange(id, state);
+ }
+ },
+ new TransferConsumer.ConsumerUseCases() {
+ @Override
+ public void create(Long id, Long payer, Long payee, Integer amount)
+ {
+ restoreTransferService.create(id, payer, payee, amount);
+ }
+
+ @Override
+ public Optional<Transfer> get(Long id)
+ {
+ return restoreTransferService.get(id);
+ }
+
+ @Override
+ public void handleStateChange(Long id, Transfer.State state)
+ {
+ restoreTransferService.handleStateChange(id, state);
+ }
+ });
+ }
+
+ @Bean
+ KafkaMessagingService kafkaMessagingService(