При этом проще всего ограничивать время на обработку. Скажем давать 10 секунд клиенту ,что бы он сказал воркеру,что запись обработал. Такое предположение сильно упрощает архитектуру - так как это упрощает failure detection.
Так например сделано в amazon sqs "Immediately after a message is received, it remains in the queue. To prevent other consumers from processing the message again, Amazon SQS sets a visibility timeout, a period of time during which Amazon SQS prevents other consumers from receiving and processing the message. The default visibility timeout for a message is 30 seconds. The minimum is 0 seconds. The maximum is 12 hours"
Всем привет. Есть такой вопрос по ms sql. Есть такой запрос , который фильтрует чтобы не было soc_id в 2 таблицах. Моя задача сделать так чтобы айдишника не было в 3 таблицах. Правильно ли будет так написать "AND SOC_ID NOT IN (SELECT CPN_SOC_ID FROM COMPANY UNION SELECT CAB_SOC_ID FROM CABINET UNION SELECT AGT_SOC_ID FROM AGENT) " или лучше добавить еще один AND ? Спасибо
Правильно, запрос выполнится так, как и требует задача. Но будет ли лучше? Зависит от плана запроса, наверное. От индексов, от количества данных в таблицах, и т.п. Попробуйте, сравните результаты.
Лучше убрать это всё и заменить на NOT EXISTS (SELECT 1 FROM COMPANY WHERE COMPANY.CPN_SOC_ID = SOC_DELETED.SOC_ID) AND NOT EXISTS (SELECT 1 FROM CABINET...) AND NOT EXISTS (SELECT 1 FROM AGENT ...), мне кажется.