Вопрос

Я начинающий веб-разработчик, работающий над амбициозным проектом веб-приложений.

Итак, проведя некоторое исследование, я узнал о SQL Service Broker. Кажется, что-то, что я мог бы использовать, но я не уверен. Поскольку на изучение этого уходит много времени, я хотел быть уверен, что это будет соответствовать моим потребностям.

Мне нужно внедрить систему, в которой пользователи сайта могут отправлять текст на сайт. Этот поток сообщений должен быть избыточным и обрабатываться FIFO-способом, а на другом конце потока - другая группа пользователей, занимающихся сообщениями.

Теперь сообщение, которое читает один из этой последней группы пользователей, должно быть заблокировано, чтобы никто другой не мог его прочитать одновременно. Пользователь может затем решить обработать сообщение или нет. Только если он решит разобраться с сообщением, оно может быть удалено из очереди. Если он решает, что не хочет иметь дело с сообщением, сообщение должно быть помещено обратно в очередь (в конце очереди или, по крайней мере, с наивысшим приоритетом), чтобы другой пользователь мог прочитать его и принять решение. .

Это то, что я мог бы реализовать с помощью SQL Service Broker? Я не на том пути?

Спасибо!

Это было полезно?

Решение

IMO, лучше всего использовать Service Broker для подключения к независимому приложению в слабосвязанной форме. Под этим я подразумеваю, что связанные таким образом системы могут взаимодействовать через набор взаимно согласованных типов сообщений. Это в отличие от одного приложения, манипулирующего непосредственно с базой данных другого, например.

Из того, что вы сказали, я бы реализовал ее в виде простой таблицы, например: создайте таблицу сообщений с идентификатором PK, флагом распределения и вашими пользовательскими столбцами. Всякий раз, когда оператор хочет получить последнее сообщение, получите наименьшее значение PK, для которого Allocation = 'N', и обновите Allocation до 'Y'. Это в одной транзакции. Когда / если операция решает вернуть сообщение в очередь, просто установите для его AllocationFlag значение «N» и обратно.

Это всего лишь пример. База данных в этом случае обеспечивает согласованность, производительность при высокой нагрузке и т. Д.

За экранами все данные, которые вы отправляете в SSB, хранятся и обрабатываются в виде таблиц, поэтому нет причин, по которым они обязательно должны быть быстрее, чем решение для баз данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top