Как настроить исходящую почту в asp.net и связать ее с SaveChanges в контексте ef - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть эта настройка

  • ядро ​​asp.net (2.1)
  • ef core (2.1)
  • masstransit (5.1)

Во время действия контроллера, когда я выполняю как изменения базы данных, так и публикации событий, я хотел бы хранить исходящие сообщения в папке исходящих сообщений в памяти, пока не узнаю, что транзакция контекста EF успешно зафиксирована в базе данных.

Я готов взять на себя риск того, что отправка затем не удастся, но так как она близка к нулю по сравнению с неудачными транзакциями в БД, например, из-за исключений параллелизма, я не рассматриваю это как риск, достойный рассмотрения в моем случае.

Возможно ли как-то настроить текущую реализацию UseInMemoryOutbox?Или я должен свернуть свою собственную таблицу исходящих сообщений , как описано в этом ответе SO , и сохранить сообщения, которые будут отправлены в той же самой транзакции БД, а затем иметь фонового работника, опрашивающего эту таблицу и отправляющего исходящие сообщения, чтобы добиться этого

1 Ответ

0 голосов
/ 01 мая 2019

Было бы лучше отправить команду в очередь (через MT, используя конечную точку отправки) в действии контроллера, а затем использовать потребителя, чтобы (1) извлечь сообщение из очереди, (2) использовать команду in-память исходящих событий и (3) вставка соответствующих данных в базу данных.Таким образом, контроллер не зависит от задержки базы данных и очереди сообщений для создания событий.И эта команда более длительно обрабатывается потребителем, что позволяет контроллеру API быстро возвращать код ответа Http / 201 Accepted.

...