Я использую AWS Kinesis Client Library.Kinesis: Какой лучший/безопасный способ закрыть рабочего?
Мне нужен способ отключения рабочего потока Kinesis во время развертывания, чтобы я остановился на контрольно-пропускном пункте, а не в середине processRecords()
.
Я вижу выключение булевского присутствия в Worker.java
, но оно сделано частным.
Причина, по которой мне нужно, что контрольная точка и идемпотентность важны для меня, и я не хочу убивать процесс посередине партии.
[EDIT]
Благодаря @CaptainMurphy, я заметил, что Worker.java
выставляет shutdown()
метод, который надежно закрывает вниз работника и LeaseCoordinator
. То, что он не делает, это вызов shutdown()
задачи в IRecordProcessor
. Он внезапно заканчивает IRecordProcessor
, не беспокоясь о состоянии.
Я понимаю, что Идемпотентность между контрольно-пропускными пунктами не гарантируется KCL и разработчик должен сделать дизайн вино терпимо, но я чувствую, что IRecordProcessor
должен быть правильно завершить работу перед LeaseCoordinator
останавливается независимо от того, что.
Публичная функция установки флага выключения определена в строке 471. – engineerC
public void shutdown() { this.shutdown = true; } – engineerC
@CaptainMurphy: спасибо. это отключает работника, который, в свою очередь, отключает «LeaseCoordinator». Я надеялся, что Работник будет ждать завершения процесса processRecords. Теперь я планирую вручную «контрольно-пропускные пункты» осколков, а затем прекратить работу. Пожалуйста, совет, если есть более рекомендуемый способ сделать это. –