Об этом будет сказано. То, что я сделал, - создать специальную очередь сообщений в SQL Server 2005. У меня есть таблица с сообщениями, которые содержат отметки времени для подтверждения и завершения. Хранимая процедура, которую выполняют вызывающие абоненты для получения следующего сообщения в очереди, также подтверждает сообщение. Все идет нормально. Ну, если система испытывает огромное количество транзакций (в тысячах в минуту), не возможно ли, чтобы сообщение подтверждалось другим выполнением хранимой процедуры, а другая была подготовлена к тому самому? Позвольте мне помочь, показывая мой код SQL в сохраненном proc:
--Grab the next message id
declare @MessageId uniqueidentifier
set @MessageId = (select top(1) ActionMessageId from UnacknowledgedDemands);
--Acknowledge the message
update ActionMessages
set AcknowledgedTime = getdate()
where ActionMessageId = @MessageId
--Select the entire message
...
...
В приведенном выше коде не удалось запустить другую хранимую процедуру одновременно с тем же идентификатором и попытаться подтвердить его одновременно? Мог ли я (или должен ли я) реализовать какую-то блокировку, чтобы предотвратить попытку другого сохраненного proc от подтверждения сообщений, которые запрашивает другой сохраненный proc?
Ничего себе, это вообще не имело смысла? Это немного сложно сказать...