Я создаю систему очередей с использованием SQL Server в серверной части приложения.План состоит в том, чтобы создать систему очередей типа FIFO, аналогичную тому, как устроен ресторан быстрого питания.Клиенты будут входить в очередь и будут обслуживаться X количеством работников.Когда клиент обрабатывается, следующий клиент будет обслуживаться доступным работником.Я думаю, что моя проблема похожа на проблему в этом посте , но я не уверен, что это точно такой же сценарий.
Я посмотрел на «Использование таблицами в качестве очередей» Русано article , и я понимаю, что мне нужно сделать что-то похожее на его пример FIFO, показанный ниже:
create table FifoQueue
(
Id bigint not null identity(1,1),
Payload varbinary(max)
);
go
create clustered index cdxFifoQueue on FifoQueue (Id);
go
create procedure usp_enqueueFifo
@payload varbinary(max)
as
set nocount on;
insert into FifoQueue (Payload) values (@Payload);
go
create procedure usp_dequeueFifo
as
set nocount on;
with cte as
(
select top(1) Payload
from FifoQueue with (rowlock, readpast)
order by Id
)
delete from cte
output deleted.Payload;
go
Пример структуры очереди
Status таблица:
1 = Waiting
2 = Getting served
3 = Processed
EnterQueue Time | LeaveQueue Time | Worker | Status
----------------+-----------------+--------+--------
11:22 | 11:24 | 1 | 3
11:23 | | 2 | 2
11:26 | | 1 | 2
11:27 | | NULL | 1
Клиенты добавляются в очередь с помощью хранимой процедуры.Следующий обслуживаемый клиент основан на времени его входа.
Могу ли я использовать хранимую процедуру, основанную на примере FIFO, для обработки / вывода очереди клиентов?