根据我的理解ack
,使用与ISpout Javadoc建议的紧密循环相同的线程调用fail
和nextTuple
函数:
nextTuple,ack和fail都在一个紧凑的循环中被调用 spout任务中的线程。
假设我们有一个合成元组生成器,我们希望限制每秒喷出的元组数量。怎么能实现呢?睡觉()是个好主意吗?还有另一种方法吗?
答案 0 :(得分:2)
睡眠可能不是最好的主意,因为它会阻止喷口处理进入的消息。见这里:Why should I not loop or block in Spout.nextTuple()
我只计算发出的元组并记住时间戳。如果超过每个时间单位的元组数并且时间单位没有通过,则只需从nextTuple()
返回而不发出任何元组。通过时间单位后,将计数器重置为零,按时间单位前进时间戳,然后恢复发光。第四个。