如何在asp.net中设置内存发件箱并将其绑定到ef上下文的SaveChanges

问题描述 投票:0回答:1

我有这个设置

  • asp.net核心(2.1)
  • ef核心(2.1)
  • masstransit(5.1)

在我执行数据库更改和发布事件的控制器操作期间,我想将传出消息保存在内存发件箱中,直到我知道EF上下文事务已成功提交到数据库。

我愿意承担发送然后失败的风险,但是因为与例如由于例如数据库事务失败导致数据库事务失败相比接近于零。并发异常在我的案例中,我认为这不是一个值得考虑的风险。

这可能以某种方式设置当前的UseInMemoryOutbox实现吗?或者我是否必须滚动自己的发件箱表like discussed in this SO answer并保存要在同一db事务中发送的消息,然后让后台工作程序轮询该表并发送传出消息来实现此目的?

asp.net-core entity-framework-core masstransit
1个回答
0
投票

最好在控制器操作中将命令发送到队列(通过MT,使用发送端点),然后使用消费者(1)从队列中提取消息,(2)使用内存中的发件箱对于事件,以及(3)将相关数据插入数据库。这样,控制器不依赖于数据库延迟和消息队列来产生事件。并且命令由消费者更持久地处理,允许API控制器快速返回Http / 201 Accepted响应代码。

© www.soinside.com 2019 - 2024. All rights reserved.