我有这个设置
- asp.net 核 (2.1(
- EF 核心 (2.1(
- 公共交通 (5.1(
在执行数据库更改和发布事件的控制器操作期间,我希望将传出消息保存在内存中的发件箱中,直到我知道 EF 上下文事务已成功提交到数据库。
我愿意承担发送失败的风险,但由于与由于并发异常等原因而导致的数据库事务失败相比,这接近于零,因此我认为在我的情况下不值得考虑风险。
是否可以以某种方式使用当前的UseInMemoryOutbox
实现进行设置?还是我必须像这个 SO 答案中讨论的那样滚动我自己的发件箱表,并将要发送的消息保存在同一个数据库事务中,然后让后台工作线程轮询该表并发送传出消息来实现这一点?
控制器操作中将命令发送到队列(通过 MT,使用发送端点(,然后使用使用者 (1( 从队列中提取消息,(2( 使用内存中发件箱处理事件,以及 (3( 将相关数据插入数据库。这样,控制器就不依赖于数据库延迟和消息队列来生成事件。并且该命令由使用者更持久地处理,允许 API 控制器快速返回 Http/201 接受响应代码。