package com.amazonaws.services.kinesis.producer.demo;
import java.nio.ByteBuffer;
import java.util.concurrent.BlockingQueue;
import com.amazonaws.services.kinesis.producer.KinesisProducer;
import com.amazonaws.services.kinesis.producer.KinesisProducerConfiguration;
public class KPLClickEventsToKinesis extends AbstractClickEventsToKinesis {
private final KinesisProducer kinesis;
public KPLClickEventsToKinesis(BlockingQueue<ClickEvent> inputQueue) {
super(inputQueue);
kinesis = new KinesisProducer(new KinesisProducerConfiguration()
.setRegion(REGION)
.setRecordMaxBufferedTime(5000));
}
@Override
protected void runOnce() throws Exception {
ClickEvent event = inputQueue.take();
String partitionKey = event.getSessionId();
ByteBuffer data = ByteBuffer.wrap(
event.getPayload().getBytes("UTF-8"));
while (kinesis.getOutstandingRecordsCount() > 5e4) {
Thread.sleep(1);
}
kinesis.addUserRecord(STREAM_NAME, partitionKey, data);
recordsPut.getAndIncrement();
}
@Override
public long recordsPut() {
return super.recordsPut() - kinesis.getOutstandingRecordsCount();
}
@Override
public void stop() {
super.stop();
kinesis.flushSync();
kinesis.destroy();
}
}