Служба «Bars.NodeSynchronization.Service» не имеет ограничений на количество запущенных процессов и может работать параллельно.
Конфигурация происходит в файле appseting.json
1 служба синхронизирует 1 локальную базу данных с произвольным количество внешних баз.
Синхронизируются следующие таблицы по порядку:
Category, SuperAccount, AccountStock, MasterTransaction, а так же определённый набор связанных таблиц: в частности LookupInterface (синхронизация структуры папок для категорий товаров и услуг, а также VIP-клиентов)
Проверка идёт по полю «guid». Если на удалённом сервере есть запись с определенным guid, а в локальном нет, то идёт запрос на получение всех связанных записей и запись в таблицы на локальном сервере.
Отслеживание изменений происходит путём сохранения даты и времени последнего синхронизируемого элемента в файл «имя_вервера.cache.json».
Доступен механизм ручной (принудительной) синхронизации счёта клиента по guid, доступный в виде отдельного метода API, который используется в модулях «Барс.Администратор» и «Барс.Кассир» (кнопка «Синхронизовать»).
Настройки указанные в файле appsetting.json:
Настройка RemoteConnectionStrings
Перечень удалённых баз данных задаётся в виде json-объекта (не списом)
..
"RemoteConnectionStrings": {
"RemoteConnectionStrings": {
"testing1": "Server=localhost,1434;Initial Catalog=bars-2;UID=sa;PWD=;Encrypt=False",
"testing2": "Server=localhost,1435;Initial Catalog=bars-2;UID=sa;PWD=;Encrypt=False"
},
},
..
Для проверки доступности службы добавляем её адрес в Администраторе - Настройки - Глобальные настройки - Внутренние службы
Галочка «Использовать службу синхронизации с удалёнными БД» делает доступной кнопку «Синхронизировать» в окне счёта: в модулях «Барс.Администратор» и «Барс.Кассир».

Локальные настройки: достаточно использовать только глобальную настройку. Дополнительные параметры для взаимодействия со службой синхронизации в отдельных модулях Барс не требуются.
Сама проверка доступности осуществляется в окне: Сервис - Внутренние службы. Аналогично другим службам Барс.

В процессе синхронизации данных по категориям товаров и услуг, а также состоянием счетов клиентов происходит в том числе обновление структуры папок. Для счетов - папки, которых разложены VIP-клиенты.
Когда изменяется папка для VIP-клиента, счёт в базе помечается как изменённый, и в процессе синхронизации для него будет собрана вся иерархия каталогов.
Важно: При синхронизации никакие каталоги не удаляются, а только создаются недостающие. Предполагается ручное удаление больше неиспользуемых папок.

Если активирована глобальная настройка «Использовать службу синхронизации с удалёнными БД», в интерфейсе просмотра счёта модулей «Барс.Администратор» и «Барс.Кассир» становится доступной кнопка "Синхронизовать".


При использовании функции ручной синхронизации на службу будет отправлен HTTP-запрос, в котором передаётся GUID счёта и формируется задача на обновление счёта данными из удалённых баз, если они более новые.
POST /SyncRequest/6C71783F-DB23-4101-AAFC-5CDD7C8E7D49 HTTP/1.1
Host: localhost:6000
HTTP Post-запрос по пути: адрес_службы:порт/SyncRequest/GUID_счёта
Если служба уже находится в процессе синхронизации по таймеру MainSyncDelay, то сначала завершается текущая итерация синхронизации, затем происходит обработка по ручной синхронизации счёта из запроса. Таким образом, основная задача ставится на паузу, выполняется форсированный SynRequest, затем служба возвращается к циклу синхронизации. Таким образом, предотвращаем возможные конфликты.
Ожидания на вклинивание в основной процесс синхронизации регулируются настройками WaitForcedSyncTimeout и WaitLoopedSyncTimeout.
Форсированная синхронизация должна укладываться в WaitForcedSyncTimeout, иначе служба вернётся к основному циклу раньше, пропустив запрос
И наоборот, если ручная синхронизация не дождалась по WaitLoopedSyncTimeout текущей итерации синхронизации, запрос будет проигнорирован.
Ответ на запрос SyncRequest служба возвращает сразу, как только он получен. Успешный статус 200 означает, что запрос принят и будет попытка его обработки в рамках логики, описанной выше. То есть модули не ждут ответа о завершении операции, а просто ставят задачу «в очередь». О чём непосредственно написано в окне-сообщении после отправки запроса.
