170 похожих чатов

Коллеги! Не понимаю как продумать архитектуру (ASP.NET + EF): 1) Приходит

http реквест, таск на отправку, например, 17.000 уведомлений.
2) Мне надо создать для каждого таск на отправку, сохранив предварительный статус (условно - QUEUED) каждого конкретного уведомления в БД.
3) Вернуть http-ответ с id всех уведомлений в БД, для дальнейшего опроса статусов.
(С этой частью проблем пока нет)

Далее, есть сторонняя либа-пушер, работает примерно так (псевдокод, упрощенный):
https://pastebin.com/Hm0KGsZD

Здесь есть 3 вопроса:
1) Я не понимаю как мне сохранить обновленный logRecord в БД. Если я инициализирую DbContext в DI, то к моменту получения OnSent/OnFailed эвента, DbContext оказывается уже мертвым, и я получаю ObjectDisposedException при обращении к нему.
2) При этом, Dictionary, который MessageLogs - не оказывается Disposed, и я этого не понимаю, в чем разница?
3) Есть ощущение что сама архитектура с этим словарем - она не очень верная, и полагается на то что внешний сервис пушей всегда генерирует уникальные Id для мессаджей. Но что если это не так? В идеале, я хочу иначе, мне хочется добавить поле LogRecordId в эту сущность, и соответственно в коллбеке уже оперировать с ней. Может есть какой-то сахар который позводит мне добиться желаемого не перекрывая абсолютно каждый вызов в ExternalLibraryMessageSender?

Вобщем, есть ощущение что я напортачил с архитектурой и там все неверно, но я пока не очень понимаю как сделать верно 🙂

1 ответов

13 просмотров

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

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

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Карта сайта