package stormapplied.flashsale.topology; import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Random; import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.base.BaseRichSpout; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Values; import backtype.storm.utils.Utils; import stormapplied.flashsale.services.LatencySimulator; public class CustomerRetrievalSpout extends BaseRichSpout { private SpoutOutputCollector outputCollector; private final Random idGenerator = new Random(); @Override public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector outputCollector) { this.outputCollector = outputCollector; } @Override public void nextTuple() { new LatencySimulator(1, 25, 10, 40, 5).simulate(1000); int numberPart = idGenerator.nextInt(9999999) + 1; String customerId = "customer-" + Integer.toString(numberPart); outputCollector.emit(new Values(customerId)); } @Override public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { outputFieldsDeclarer.declare(new Fields("customer")); } }