|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Привет, может не тот форум, но вопрос примерно такой: Как работать с ситуацией когда надо совместить запись в БД и какое-нибудь внешнее действие, типа отправки емайла. Простой сценарий: 1. В таблицу вставляется запись с флагом Sent=0 2. По этой записи каким-то образом генерируется и отправляется емайл. 3. В записи устанавливается флаг Sent=1 Если коммитить после #1, то возможна ситуация когда емайл отправится, а Sent останется равным 0. Если коммитить после #3, то возможна ситуация когда емайл отправится, а записи в таблице не будет вообще. PS: В общем случае имеется ввиду не только отправка emailа, но любое действие типа вызова вебсервиса или записи чего-нибудь в оборудовние. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 11:11 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
В любом случае не надо делать такие вещи, как отправка email внутри транзакции. GivvЕсли коммитить после #1, то возможна ситуация когда емайл отправится, а Sent останется равным 0.это еще почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 11:20 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ну сеть упадет между #2 и #3 или еще что-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 11:28 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvПривет, может не тот форум, но вопрос примерно такой: Как работать с ситуацией когда надо совместить запись в БД и какое-нибудь внешнее действие, типа отправки емайла. Простой сценарий: 1. В таблицу вставляется запись с флагом Sent=0 2. По этой записи каким-то образом генерируется и отправляется емайл. 3. В записи устанавливается флаг Sent=1 Если коммитить после #1, то возможна ситуация когда емайл отправится, а Sent останется равным 0. Если коммитить после #3, то возможна ситуация когда емайл отправится, а записи в таблице не будет вообще. PS: В общем случае имеется ввиду не только отправка emailа, но любое действие типа вызова вебсервиса или записи чего-нибудь в оборудовние. 1,коммит, 2, 3, коммит Но в любом случае придется врукопашную изображать из себя двухступенчатую транзакцию, и возможны коллизии. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 11:58 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Givv, Длительные внешние процессы делать асинхронно. Есть распределенные транзакции, но письма к ним не относятся. Просто отправку повесь на JOB субд или IIS. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:00 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
ИМХО для начала стоит определиться с тем, какое поведение требуется. 1. Добавить запись о начале отправки; 2. Отправить письмо; 3. Изменить статус на Отправлено. Если письмо не отправилось то повторить попытку. Если попало в gray list, то повторить попытку. Если... А потом уже выбирать решение. Мне пока не понятно, при чём тут транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:03 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvНу сеть упадет между #2 и #3 или еще что-то. Сеть между чем и чем? Пусть "отправлятор" ставит в очередь сообщение о том, что отправил, а "разгребатор" этой очереди как сеть будет, то выгребет сообщение из очереди и изменит статус в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:08 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
skyANA, Основной вопрос в том, что делать, если письмо отправилось и выключилось электричество. Есть ли общепринятая практика разруливания таких ситуаций? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:10 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvskyANA, Основной вопрос в том, что делать, если письмо отправилось и выключилось электричество. Есть ли общепринятая практика разруливания таких ситуаций?Развить обсуждение на форуме об этом страниц на 20 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:12 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Givv, Вы представляете, что происходит с обычной транзакцией, когда выключается электричество? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:13 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvskyANA, Основной вопрос в том, что делать, если письмо отправилось и выключилось электричество. Есть ли общепринятая практика разруливания таких ситуаций? ИБП. Что делать, если на сервер упадет метеорит, или начнется зомби-апокалипсис - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:13 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvОсновной вопрос в том, что делать, если письмо отправилось и выключилось электричество. Есть ли общепринятая практика разруливания таких ситуаций? Сказали же уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:15 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
skyANAGivv, Вы представляете, что происходит с обычной транзакцией, когда выключается электричество? Да не, он просто проигнорировал skyANA1. Добавить запись о начале отправки; 2. Отправить письмо; 3. Изменить статус на Отправлено. вот что с людьми такое, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:16 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
skyANAGivv, Вы представляете, что происходит с обычной транзакцией, когда выключается электричество? Видимо изменения откатятся, но тут вопрос в том что #3 может даже не начатся ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:17 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Givvчто #3 может даже не начатсягде не прошла строчка коммит, откатится. В чем проблема? В письме отката? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:20 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Petro123Givvчто #3 может даже не начатсягде не прошла строчка коммит, откатится. В чем проблема? В письме отката? ))) Ну в том, что письмо будет отправлено, но в базе флаг Sent=0. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:21 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Givv, Ты пишешь программу с допуском по вероятности событий. Так что конкретнее вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:24 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvPetro123пропущено... где не прошла строчка коммит, откатится. В чем проблема? В письме отката? ))) Ну в том, что письмо будет отправлено, но в базе флаг Sent=0. Вкл. Автокоммита в драйвере и коммит будет через миллисекунду. Ок? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 12:25 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0.Ну значит после включения электричества отправится второй раз и проставится Sent=1. Это проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:08 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
Shocker.ProGivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0.Ну значит после включения электричества отправится второй раз и проставится Sent=1. Это проблема? Ну да, проблема. Там на самом деле не отправка емайла, а другая "внешняя" операция, которую нельзя вызывать дважды. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:41 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvskyANAGivv, Вы представляете, что происходит с обычной транзакцией, когда выключается электричество? Видимо изменения откатятся, но тут вопрос в том что #3 может даже не начатсяЗа счёт чего они откатятся? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:48 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvShocker.Proпропущено... Ну значит после включения электричества отправится второй раз и проставится Sent=1. Это проблема? Ну да, проблема. Там на самом деле не отправка емайла, а другая "внешняя" операция, которую нельзя вызывать дважды. Всё это решается. Сформулируйте конкретный сценарий. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:49 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
GivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0. если такое случиться, не будет никакой трагедии отправить письмо повторно после включения электричества. кроме того, сервер, который получил письмо в очередь на отправку может сообщить, что письмо уже было отправлено. в механизмах типа fire and forget невозможно обеспечить 100% абсолютно атомарную транзакционность, так как после fire нет обратной связи. элекстричество может отключиться не у вас, а где-то на промежуточных серверах, и вы будете думать, что отправили, но адресат ничего не получит. увы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:50 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
skyANA]За счёт чего они откатятся? Я подозреваю, что за счет журналирования транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 13:57 |
|
Транзакция и нетранзакционное действие.
|
|||
---|---|---|---|
#18+
hVosttGivvНу в том, что письмо будет отправлено, но в базе флаг Sent=0. если такое случиться, не будет никакой трагедии отправить письмо повторно после включения электричества. Трагедия это или нет, решает бизнес :) Мы как-то запулили порцию демандов дважды (это такие своеобразные требования об оплате). По другой причине конечно, но уверю вас, это была трагедия. Но в данном конкретном случае речь идет просто об абстрактной внешней операции, которую нельзя делать дважды. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 14:01 |
|
|
start [/forum/topic.php?fid=20&fpage=34&tid=1399495]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
178ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 314ms |
total: | 604ms |
0 / 0 |