Hi I am attempting to run guaranteed message processing but ACK is not being called. Post on stack overflow if you prefer answer there. http://stackoverflow.com/questions/32060081/apache-storm-ack-not-working <http://stackoverflow.com/questions/32060081/apache-storm-ack-not-working>
Thanks 0 down vote <>favorite <http://stackoverflow.com/questions/32060081/apache-storm-ack-not-working#> I am trying to implement the guaranteed message processing but the ack or fail methods on the Spout are not being called. I am passing the a message ID object with the spout. I am passing the tuple with each bolt and calling collector.ack(tuple) in each bolt. Question The ack or fail is not being called and I cannot work out why? Here is a shortened code sample. Spout Code using BaseRichSpout public void nextTuple() { .... further code .... String msgID = UUID.randomUUID().toString() + System.currentTimeMillis(); Values value = new Values(splitUsage[0], splitUsage[1], splitUsage[2], msgID); outputCollector.emit(value, msgID); } @Override public void ack(Object msgId) { this.pendingTuples.remove(msgId); LOG.info("Ack " + msgId); } @Override public void fail(Object msgId) { // Re-emit the tuple LOG.info("Fail " + msgId); this.outputCollector.emit(this.pendingTuples.get(msgId), msgId); } Bolt Code using BaseRichBolt @Override public void execute(Tuple inputTuple) { this.outputCollector.emit(inputTuple, new Values(serverData, msgId)); this.outputCollector.ack(inputTuple); } Final Bolt @Override public void execute(Tuple inputTuple) { ..... Simply reports does not emit ..... this.outputCollector.ack(inputTuple); }
