#c# #.net #resourcemanager
#c# #.net #resourcemanager
Вопрос:
Я создаю менеджер ресурсов путем реализации IEnlistmentNotification
. Я пытаюсь создать надежную RM, которая вызвала у меня несколько вопросов.
-
Должен ли существовать
IEnlistmentNotification
объект для каждой транзакции или одинIEnlistmentNotification
объект должен обрабатывать все транзакции?Я бы подумал, что каждая транзакция хотела бы иметь свою собственную, чтобы она могла выполнять подготовку / фиксацию / откат для каждой транзакции.
-
Как обрабатывается файл восстановления?
Я предполагаю, что все, что происходит в транзакции, будет записано в файл восстановления во время подготовки.
Как можно разделить информацию для каждой транзакции? Я бы подумал, что у каждой транзакции будет отдельный файл или что у одного файла будет какой-то идентификатор транзакции для каждой операции восстановления.
Когда происходит восстановление, это
Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifier
то же самое, что и до сбоя? Итак, можно ли использовать один из этих идентификаторов для идентификации транзакции во время восстановления. -
Как происходит восстановление?
Если у меня есть
TransactionScope
, внутри которого используется мой менеджер ресурсов, и система выходит из строя (выдернут штекер или что-то еще) в середине области видимости, как происходит восстановление при резервном запуске системы? Я предполагаю, что какой-то процесс, который запускал код, в котором есть область видимости, знает о сбоях системы или что-то в этом роде? В таком случае, какие системы / программы / службы настроены для фактического выполнения восстановления?
Ответ №1:
Я полагаю, что нашел все ответы в исходном коде RavenDB.
- Да, у каждой транзакции должно быть собственное IEnlistmentNotification.
- Да, вы используете `Транзакцию.Информация о транзакции.DistributedIdentifier/localIdentifier’ для отслеживания транзакций в файле или файлах восстановления.
- Приложение, выполняющее код, выполнит проверку, требуется ли восстановление, и повторно зарегистрирует транзакции, которые не были завершены при отключении подключения.