package com.realtimecep.storm.starter.trident;
import backtype.storm.Config;
import backtype.storm.task.TopologyContext;
import backtype.storm.tuple.Fields;
import backtype.storm.utils.Utils;
import storm.trident.operation.TridentCollector;
import storm.trident.spout.IBatchSpout;
import java.util.List;
import java.util.Map;
public class MyFixedBatchSpout implements IBatchSpout {
Fields fields;
List<Object>[] outputs;
int maxBatchSize;
public MyFixedBatchSpout(Fields fields, int maxBatchSize, List<Object>... outputs) {
this.fields = fields;
this.outputs = outputs;
this.maxBatchSize = maxBatchSize;
}
int index = 0;
boolean cycle = false;
public void setCycle(boolean cycle) {
this.cycle = cycle;
}
@Override
public void open(Map conf, TopologyContext context) {
index = 0;
}
@Override
public void emitBatch(long batchId, TridentCollector collector) {
Utils.sleep(1000);
if (index >= outputs.length && cycle) {
index = 0;
}
// System.out.println("### start emitBatch: " + batchId + " --------------------------");
for (int i = 0; index < outputs.length && i < maxBatchSize; index++, i++) {
collector.emit(outputs[index]);
// System.out.println("### " + batchId + " - " + index + " : " + outputs[index]);
}
// System.out.println("### stop emitBatch: " + batchId + " --------------------------");
}
@Override
public void ack(long batchId) {
}
@Override
public void close() {
}
@Override
public Map getComponentConfiguration() {
Config conf = new Config();
conf.setMaxTaskParallelism(1);
return conf;
}
@Override
public Fields getOutputFields() {
return fields;
}
}