Проблема
У меня есть приложение CakePHP, в котором я вызываю хранимую процедуру:
$this->FileUpload->query('exec sproc_runjob_ProcessTests', false);
Эта процедура подбирает загруженный файл и обрабатывает его. Иногда люди загружают несколько файлов, которые называет это один раз для каждого загруженного файла.
Проблема в том, что я получаю эту ошибку:
Database Error Error: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server] SQLServerAgent Error: Request to run job ProcessTests (from User [redacted]) refused because the job already has a pending request from User [redacted]. SQL Query: exec sproc_runjob_ProcessTests
Насколько я могу судить, это означает, что хранимая процедура не может работать одновременно – мне придется запускать sproc для каждого процесса последовательно, что было бы позором на нашем новом новом многоядерном сервере.
Решения, о которых мы думали
Запускать sproc серийно
В принципе, идея состоит в том, чтобы однажды вызвать хранимую процедуру, а затем проигнорировать ее сбой, если она уже запущена. В конце вызова sproc он проверит базу данных, чтобы увидеть, нужно ли ее снова запускать (если есть какие-либо «новые» файлы) и снова запустить себя, если это так.
Не используйте существующую хранимую процедуру
Это было бы трудно из-за ограничений по времени, но если у кого-то есть хорошее предположение о том, как мы должны это делать, я был бы рад услышать это.
Заранее спасибо!
Результаты поиска
Похоже, у этого парня такая же проблема, и решает его, проверяя статус задания перед тем, как позвонить. Возможно, я мог бы сделать это с PHP, прежде чем сделать вызов sproc?
Вот упоминание о чем-то, что называется Service Broker. На самом деле это может быть то, что я ищу, но я все равно буду любить любые материалы.
Заранее спасибо!