Транзакционный процесс Hangfire (единица работы)

Как было предложено davitenio и qris, я бы рекомендовал использовать директиву #doctest: +ELLIPSIS , как это.

>>> from test.test_ppp import MockForm
>>> form = MockForm(mock_file='no-errors.xlsx')
>>> form.get_languages(settings_default='English', survey_header=
... form.metadata['raw_data']['survey'][0])  #doctest: +ELLIPSIS
['Ateso', 'English', 'Luganda', ... 'Runyoro-Rutoro']

1
задан Adem Catamak 17 January 2019 в 11:33
поделиться

1 ответ

Похоже, что инициируется транзакция distrubutrd, abd, которая не поддерживается в ядре .net.

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

Вы можете вывести _backgroundJobClient.Enqueue() Hangfire из области видимости, и таким образом эскалация не произойдет.

Вам нужно будет найти другой способ убедиться, что оба действия выполнены (обновление базы данных, постановка очереди на зависание)

РЕДАКТИРОВАТЬ : поскольку у вас не может быть транзакции, вы должны настроить свои услуги на обрабатывать возможные ситуации отказа. например: Служба учетных записей будет:

  1. Сохранять созданное, используемое в БД

  2. , а затем вызывать Enqueue Hangfire

  3. [ 114]

    Записать тот факт, что задание hangfire было создано в той же базе данных пользователя.

  4. служба пользователя должна опросить базу данных, чтобы увидеть, были ли созданы пользователи, но уведомление не было зарегистрировано.

Другие микросервисы должны иметь возможность обрабатывать дубликаты уведомлений.

Таким образом, если пользователь был создан, но уведомление не было отправлено, ваша служба будет повторно отправлена ​​(4).

Принимающие службы будут игнорировать повторяющийся запрос, если сбой происходит между (2) и (3)

0
ответ дан Menahem 17 January 2019 в 11:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: