不需要担心消费者会在一个无限循环里轮询消息,因为消费者可以优雅地退出循环。如果确定要退出循环,需要通过另一个线程调用consuner.wakeup()方法。如果循环运行在主线程里,可以在ShutdownHook里调用该方法。要记住,consumer.wakeup()是消费者唯一一个可以从其他线程里安全调用的方法。调用consuner.wakeup()可以退出poll(),并抛出WakeupException异常,或者如果调用consuner.wakeup()时线程没有等待轮询,那么异常将在下一轮调用poll()时抛出。我们不需要处理WakeupException,因为它只是用于跳出循环的一种方式。不过,在退出线程之前调用consumer.close()是很有必要的,它会提交任何还没有提交的东西,并向群组协调器发送消息,告知自己要离开群组,接下来就会触发再均衡,而不需要等待会话超时。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。