Мы работаем над заменой нашей старой VB6-системе, использующей SQL-сервер. Большая часть бизнес-логики находится в хранимых процедурах и триггерах. В настоящее время мы имеем некоторые функции NServiceBus, используя триггеры в базе данных для размещения сообщений в очереди (SQLTransport).Архитектура приложения с API NServiceBus и REST
Я хотел бы создать новую чистую api, которая использует все те же таблицы и хранимые процедуры за кулисами. Когда все приложения и службы используют новые системы api и messaging, мы можем начать очищать бэкэнд.
Новый интерфейс вызовет REST api для извлечения данных. То, с чем я борюсь, - это лучшие практики, выполняющие операции, которые создают/обновляют/удаляют данные. Для автоматизированных процессов, которые не требуют немедленного ответа, они могут просто отправить команду по шине. Однако для конечных пользователей, которые будут использовать приложение, они ожидают немедленных результатов. Если что-то вызывает сообщение в FLR/SLR, очевидно, что клиент не может сидеть там, ожидая чего-то.
Одна из идей - иметь библиотеку, которая обрабатывает все вызовы в базу данных, которые могут использовать как API, так и любые обработчики сообщений NServiceBus. Проблема, которую я вижу, - это когда операция должна публиковать событие. Из обработчика сообщений можно просто публиковать сообщение. Если я обрабатываю простую команду из REST api, я не могу просто опубликовать одно и то же событие (так как ничто не подписывается на REST api, и это может быть
Одним из решений может быть предоставление REST api send (не публиковать) сообщение конечной точке (тот, на который подписаны другие конечные точки), который затем опубликует событие всем подписчикам.
Как другие реализуют что-то вроде этого? Основные случаи использования, которые я думаю из простых операций create/update/delete, которые клиент ожидает от результатов в реальном времени, но бэкэнду, возможно, потребуется опубликовать событие, указывающее на то, что что-то произошло.
http://docs.particular.net/nservicebus/hosting/publishing-from-web-applications –
Спасибо, я прочитал это несколько раз. В нем говорится о том, что я упомянул: «Учитывая эти факты, общепринятая мудрость предположила, что, когда в контексте веб-приложения лучше отправлять команды только конечной точке службы, которая затем может опубликовать подобное событие.«но еще один вариант, о котором он также говорит, - это возможность иметь отдельную конечную точку диспетчера подписки, а веб-приложения используют одно и то же хранилище подписки. – Mark