Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Транзакция и нетранзакционное действие. / 25 сообщений из 54, страница 1 из 3
09.02.2018, 11:11
    #39599539
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Привет, может не тот форум, но вопрос примерно такой:

Как работать с ситуацией когда надо совместить запись в БД и какое-нибудь внешнее действие, типа отправки емайла.

Простой сценарий:

1. В таблицу вставляется запись с флагом Sent=0
2. По этой записи каким-то образом генерируется и отправляется емайл.
3. В записи устанавливается флаг Sent=1

Если коммитить после #1, то возможна ситуация когда емайл отправится, а Sent останется равным 0.
Если коммитить после #3, то возможна ситуация когда емайл отправится, а записи в таблице не будет вообще.


PS:
В общем случае имеется ввиду не только отправка emailа, но любое действие типа вызова вебсервиса или записи чего-нибудь в оборудовние.
...
Рейтинг: 0 / 0
09.02.2018, 11:20
    #39599549
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
В любом случае не надо делать такие вещи, как отправка email внутри транзакции.

GivvЕсли коммитить после #1, то возможна ситуация когда емайл отправится, а Sent останется равным 0.это еще почему?
...
Рейтинг: 0 / 0
09.02.2018, 11:28
    #39599557
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Shocker.Pro,

Ну сеть упадет между #2 и #3 или еще что-то.
...
Рейтинг: 0 / 0
09.02.2018, 11:58
    #39599577
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvПривет, может не тот форум, но вопрос примерно такой:

Как работать с ситуацией когда надо совместить запись в БД и какое-нибудь внешнее действие, типа отправки емайла.

Простой сценарий:

1. В таблицу вставляется запись с флагом Sent=0
2. По этой записи каким-то образом генерируется и отправляется емайл.
3. В записи устанавливается флаг Sent=1

Если коммитить после #1, то возможна ситуация когда емайл отправится, а Sent останется равным 0.
Если коммитить после #3, то возможна ситуация когда емайл отправится, а записи в таблице не будет вообще.



PS:
В общем случае имеется ввиду не только отправка emailа, но любое действие типа вызова вебсервиса или записи чего-нибудь в оборудовние.

1,коммит, 2, 3, коммит

Но в любом случае придется врукопашную изображать из себя двухступенчатую транзакцию, и возможны коллизии.
...
Рейтинг: 0 / 0
09.02.2018, 12:00
    #39599579
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Givv,
Длительные внешние процессы делать асинхронно. Есть распределенные транзакции, но письма к ним не относятся.
Просто отправку повесь на JOB субд или IIS.
...
Рейтинг: 0 / 0
09.02.2018, 12:03
    #39599582
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
ИМХО для начала стоит определиться с тем, какое поведение требуется.

1. Добавить запись о начале отправки;
2. Отправить письмо;
3. Изменить статус на Отправлено.

Если письмо не отправилось то повторить попытку.
Если попало в gray list, то повторить попытку.
Если...

А потом уже выбирать решение.

Мне пока не понятно, при чём тут транзакции.
...
Рейтинг: 0 / 0
09.02.2018, 12:08
    #39599586
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvНу сеть упадет между #2 и #3 или еще что-то.
Сеть между чем и чем?
Пусть "отправлятор" ставит в очередь сообщение о том, что отправил, а "разгребатор" этой очереди как сеть будет, то выгребет сообщение из очереди и изменит статус в БД.
...
Рейтинг: 0 / 0
09.02.2018, 12:10
    #39599591
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
skyANA,
Основной вопрос в том, что делать, если письмо отправилось и выключилось электричество.

Есть ли общепринятая практика разруливания таких ситуаций?
...
Рейтинг: 0 / 0
09.02.2018, 12:12
    #39599593
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvskyANA,
Основной вопрос в том, что делать, если письмо отправилось и выключилось электричество.

Есть ли общепринятая практика разруливания таких ситуаций?Развить обсуждение на форуме об этом страниц на 20
...
Рейтинг: 0 / 0
09.02.2018, 12:13
    #39599595
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Givv,

Вы представляете, что происходит с обычной транзакцией, когда выключается электричество?
...
Рейтинг: 0 / 0
09.02.2018, 12:13
    #39599596
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvskyANA,
Основной вопрос в том, что делать, если письмо отправилось и выключилось электричество.

Есть ли общепринятая практика разруливания таких ситуаций?
ИБП.
Что делать, если на сервер упадет метеорит, или начнется зомби-апокалипсис - не знаю.
...
Рейтинг: 0 / 0
09.02.2018, 12:15
    #39599597
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvОсновной вопрос в том, что делать, если письмо отправилось и выключилось электричество.

Есть ли общепринятая практика разруливания таких ситуаций?


Сказали же уже.
...
Рейтинг: 0 / 0
09.02.2018, 12:16
    #39599600
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
skyANAGivv,

Вы представляете, что происходит с обычной транзакцией, когда выключается электричество?

Да не, он просто проигнорировал


skyANA1. Добавить запись о начале отправки;
2. Отправить письмо;
3. Изменить статус на Отправлено.


вот что с людьми такое, а?
...
Рейтинг: 0 / 0
09.02.2018, 12:17
    #39599601
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
skyANAGivv,

Вы представляете, что происходит с обычной транзакцией, когда выключается электричество?

Видимо изменения откатятся, но тут вопрос в том что #3 может даже не начатся
...
Рейтинг: 0 / 0
09.02.2018, 12:20
    #39599604
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Givvчто #3 может даже не начатсягде не прошла строчка коммит, откатится. В чем проблема? В письме отката? )))
...
Рейтинг: 0 / 0
09.02.2018, 12:21
    #39599605
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Petro123Givvчто #3 может даже не начатсягде не прошла строчка коммит, откатится. В чем проблема? В письме отката? )))

Ну в том, что письмо будет отправлено, но в базе флаг Sent=0.
...
Рейтинг: 0 / 0
09.02.2018, 12:24
    #39599607
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Givv,
Ты пишешь программу с допуском по вероятности событий.
Так что конкретнее вопрос.
...
Рейтинг: 0 / 0
09.02.2018, 12:25
    #39599609
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvPetro123пропущено...
где не прошла строчка коммит, откатится. В чем проблема? В письме отката? )))

Ну в том, что письмо будет отправлено, но в базе флаг Sent=0.
Вкл. Автокоммита в драйвере и коммит будет через миллисекунду.
Ок?
...
Рейтинг: 0 / 0
09.02.2018, 13:08
    #39599634
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0.Ну значит после включения электричества отправится второй раз и проставится Sent=1. Это проблема?
...
Рейтинг: 0 / 0
09.02.2018, 13:41
    #39599659
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
Shocker.ProGivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0.Ну значит после включения электричества отправится второй раз и проставится Sent=1. Это проблема?
Ну да, проблема.
Там на самом деле не отправка емайла, а другая "внешняя" операция, которую нельзя вызывать дважды.
...
Рейтинг: 0 / 0
09.02.2018, 13:48
    #39599664
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvskyANAGivv,

Вы представляете, что происходит с обычной транзакцией, когда выключается электричество?

Видимо изменения откатятся, но тут вопрос в том что #3 может даже не начатсяЗа счёт чего они откатятся?
...
Рейтинг: 0 / 0
09.02.2018, 13:49
    #39599666
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvShocker.Proпропущено...
Ну значит после включения электричества отправится второй раз и проставится Sent=1. Это проблема?
Ну да, проблема.
Там на самом деле не отправка емайла, а другая "внешняя" операция, которую нельзя вызывать дважды.
Всё это решается. Сформулируйте конкретный сценарий.
...
Рейтинг: 0 / 0
09.02.2018, 13:50
    #39599668
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
GivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0.

если такое случиться, не будет никакой трагедии отправить письмо повторно после включения электричества. кроме того, сервер, который получил письмо в очередь на отправку может сообщить, что письмо уже было отправлено.

в механизмах типа fire and forget невозможно обеспечить 100% абсолютно атомарную транзакционность, так как после fire нет обратной связи. элекстричество может отключиться не у вас, а где-то на промежуточных серверах, и вы будете думать, что отправили, но адресат ничего не получит. увы.
...
Рейтинг: 0 / 0
09.02.2018, 13:57
    #39599674
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
skyANA]За счёт чего они откатятся?
Я подозреваю, что за счет журналирования транзакций.
...
Рейтинг: 0 / 0
09.02.2018, 14:01
    #39599678
Givv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакция и нетранзакционное действие.
hVosttGivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0.

если такое случиться, не будет никакой трагедии отправить письмо повторно после включения электричества.

Трагедия это или нет, решает бизнес :)
Мы как-то запулили порцию демандов дважды (это такие своеобразные требования об оплате). По другой причине конечно, но уверю вас, это была трагедия.

Но в данном конкретном случае речь идет просто об абстрактной внешней операции, которую нельзя делать дважды.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Транзакция и нетранзакционное действие. / 25 сообщений из 54, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]