В конце концов я пришел к этой идее (сейчас не реализован):
изменить таблицу назначения, добавить столбцы lock_name, lock_time
на каждой итерации:
2.1.обновить target_table set lock_time = now (), lock_name = 'controller_instance_name' где lock_time
2.2.выберите * из target_table, где lock_name = 'controller_instance_name' и lock_time> now () - visibilityTimeout
2.3 для каждого элемента в select
2.3.1 обработайте его
2.3.2удалить его из таблицы: удалить из target_table, где id =?
Каждый экземпляр контроллера сможет выбрать строку после того, как он был заблокирован больше, чем по значению visibilityTimeout.