Как синхронизировать работу нескольких rabbit worker-ов?
Есть ситуация:в очередь падают сообщения и worker (далее обработчик) берет их в работу (rabbit). Сообщение такого формата:
{
"id": "16dfc6da-d6fc-421c-9a93-245c12b07d27",
"pool_id": "ae8ef81b-a430-4234-ba0e-b7ff17007718"
}
Если pool_id == null, то обработчик находит одну сущность по id и начинает ее обработку - проблем нет.
А если pool_id != null, то обработчик находит все сущности по pool_id и начинает их обработку.
Вот тут появляется проблема. Несколько обработчиков принимают сообщения с разными id и одним pool_id и начинают обрабатывать один и тот же пул.
Вопрос: каким способом дать понять одному обработчику, что другой уже начал обработку по pool_id? Это нужно сделать не прибегая к средствам rabbit, а только через код.
На данный момент это блокируется во время запроса на UPDATE в бд. Благодаря стоковой блокировке запись не обновится, тк уже изменились некоторые поля. Меня не устраивает такое положение потому что я хочу выбрасывать исключение, если UPDATE произошел неудачно. Но я не могу этого сделать тк исключение может вылезти как в случае неудачного обновления, так и в случае повторной обработки пула
(либо updatedCount == expectedCount -> true, либо updatedCount == 0 -> false).