Если я правильно понимаю ваш вопрос, вы пытаетесь определить структуру маршрутизации сообщений, которая работает с уже выбранным дизайном (с использованием служебной шины предприятия ) и реализацией сообщений., который вы можете использовать для передачи данных с устаревших систем, которые only forward-ports изменяют на более новые системы.
Сложность в том, что вы пытаетесь применить изменения таким образом, чтобы они сами не генерировали сообщение CDC от клиентов, получающих пакет данных из ваших устаревших систем.На самом деле, все, что вас беспокоит, это то, что ваши новые системы потребляют данные, а не распространяют сообщения обратно на вашу шину, создавая ненужные перекрестные помехи, которые могут возвести в степень, перегружая вашу инфраструктуру.
Секрет в том, как какФункции CDC MSSQL согласовывают изменения по мере их распространения по сети.В частности, обратите внимание на следующее предупреждение:
Все изменения регистрируются в терминах LSN или регистрационного порядкового номера.SQL четко идентифицирует каждую операцию DML через порядковый номер журнала.Любые зафиксированные изменения в любых таблицах записываются в журнал транзакций базы данных с определенным номером LSN, предоставленным SQL Server.Значения __ $ operationcolumn: 1 = удалить, 2 = вставить, 3 = обновить (значения до обновления), 4 = обновить (значения после обновления).
cdc.fn_cdc_get_net_changes_dbo_Employee дает нам все записи, которые изменились в сети, упалимежду LSN мы предоставляем в функции.У нас есть три записи, возвращаемые функцией net_change;Произошло удаление, вставка и два обновления, но в одной записи.В случае обновленной записи просто отображается чистое измененное значение после завершения обоих обновлений.
Для получения всех изменений выполните cdc.fn_cdc_get_all_changes_dbo_Employee;Есть варианты, чтобы передать 'ALL' или 'ALL UPDATE OLD'.Опция «ALL» предоставляет все изменения, но для обновлений она предоставляет после обновленные значения.Отсюда мы находим две записи для обновлений.У нас есть одна запись, показывающая первое обновление, когда Джейсон был обновлен до Nichole, и одна запись, когда Nichole был обновлен до EMMA.
Хотя эта документация несколько краткая и трудная для понимания, похоже, что изменениязарегистрирован и согласован в порядке LSN.Конкурирующие изменения должны быть отброшены этой системой, чтобы ваша модель согласованности работала эффективно.
Обратите также внимание:
CDC по умолчанию отключен и должен быть включенна уровне базы данных с последующим включением в таблицу.
Вариант B становится очевидным: установите CDC в устаревших системах, затем используйте служебную шину для преобразования этих изменений в обновления, которые не связаныCDC (используя, например, необработанные операторы обновления транзакций).Это должно обеспечить односторонний поток данных, которые вы запрашиваете при проектировании вашей системы.
Для дополнительных методов согласования изменений рассмотрите концепции, поднятые в этой статье в Википедии о «возможной согласованности».Желаем удачи в вашей внутренней системе обмена сообщениями.