package com.monetate.koupler; import java.util.List; import com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownReason; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessor; import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorCheckpointer; import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorFactory; import com.amazonaws.services.kinesis.clientlibrary.lib.worker.InitialPositionInStream; import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration; import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker; import com.amazonaws.services.kinesis.model.Record; import com.amazonaws.services.kinesis.producer.KinesisProducerConfiguration; public class KinesisEventConsumer implements IRecordProcessorFactory { private static final Logger LOGGER = LoggerFactory.getLogger(KinesisEventConsumer.class); private Worker.Builder builder; public KinesisEventConsumer(String propertiesFile, String streamName, String appName, String initialPosition) { KinesisProducerConfiguration config = KinesisProducerConfiguration.fromPropertiesFile(propertiesFile); InitialPositionInStream position = InitialPositionInStream.valueOf(initialPosition); KinesisClientLibConfiguration clientConfig = new KinesisClientLibConfiguration(appName, streamName, new DefaultAWSCredentialsProviderChain(), appName) .withRegionName(config.getRegion()) .withInitialPositionInStream(position); this.builder = new Worker.Builder().recordProcessorFactory(this).config(clientConfig); } public void start(){ this.builder.build().run(); } @Override public IRecordProcessor createProcessor() { LOGGER.debug("Creating recordProcessor."); return new IRecordProcessor() { @Override public void initialize(String shardId) {} @Override public void processRecords(List<Record> records, IRecordProcessorCheckpointer checkpointer) { for (Record record : records){ byte[] bytes = new byte[record.getData().remaining()]; record.getData().get(bytes); String data = new String(bytes); LOGGER.debug("Received [{}]", data); } } @Override public void shutdown(IRecordProcessorCheckpointer checkpointer, ShutdownReason reason) { LOGGER.debug("Shutting down [{}]"); } }; } }