Этот поток содержит информацию о дизайне, которая должна быть отображаемой.
Цитировать:
Вот что я успешно использовал в прошлом:
Схема таблицы MsgQueue
Идентификатор MsgId - НЕ NULL
MsgTypeCode varchar (20) - НЕ NULL
SourceCode varchar (20) - процесс вставки сообщения - NULLable
State char (1) - «Новый, если поставлен в очередь», «A» (ctive), если обрабатывается, «C» завершен, по умолчанию «N» - NOT NULL
CreateTime datetime - значение по умолчанию GETDATE () - НЕ NULL
Msg varchar (255) - NULLable
Ваши типы сообщений - это то, что вы ожидаете - сообщения, которые соответствуют контракту между вставкой процесса (-ов) и чтением процесса (-ов), структурированы с помощью XML или другого вашего выбора представления (JSON может пригодиться в некоторых случаях). случаи, например).
Тогда процессы 0-к-n могут быть вставлены, а процессы 0-к-n могут считывать и обрабатывать сообщения. Каждый процесс чтения обычно обрабатывает один тип сообщения. Для балансировки нагрузки может быть запущено несколько экземпляров типа процесса.
Читатель извлекает одно сообщение и меняет состояние на «А», пока работает над ним. Когда это сделано, он меняет состояние на «C». Он может удалить сообщение или нет в зависимости от того, хотите ли вы сохранить контрольный журнал. Сообщения состояния = 'N' извлекаются в порядке MsgType / Timestamp, поэтому есть индекс для MsgType + State + CreateTime.
Варианты:
Состояние для "E" rror.
Столбец для кода процесса Reader.
Отметки времени для переходов между состояниями.
Это обеспечило хороший, масштабируемый, видимый, простой механизм для выполнения ряда вещей, которые вы описываете. Если у вас есть общее представление о базах данных, это довольно надежно и расширяемо. Никогда не было проблем с откатом блокировок и т. Д. Из-за транзакций перехода атомарного состояния.