spout中的emit()方法只有一个参数,因此元组不会被锚定。这就是为什么你没有回到spout中的ack()方法的回调,即使你正在使用螺栓中的元组。
要使其工作,您需要修改您的spout以发出第二个参数,即消息ID。这个id被传递回spout中的ack()方法:
public void nextTuple() { Utils.sleep(5000); //emit only 1 tuple - for testing if (!flag){ Object msgId = "ID 6"; // this can be any object this.collector.emit(new Values(6), msgId); flag = true; } } @Override public void ack(Object msgId) { // msgId should be "ID 6" System.out.println("[HelloWorldSpout] ack on msgId" + msgId); }