在我的Rails应用程序中,有些数据库事务有时会失败,并会按照乐观的并发规则进行重试。检索器与域无关;它将调用包装在事务中,如果回滚根据其逻辑再次尝试进行,或者如果认为无法成功则使任务失败。因此,代码的结构如下:
using_optimistic_concurrency { apply_domain_logic }
def apply_domain_logic
FirstObject.create!
log "first object has been created"
SecondObject.create!
log "second object has been created"
end
现在,事务(在using_optimistic_concurrency内部)将回滚对象的创建,但不会回滚日志记录。就我而言,日志记录还可以包括诸如使用外部消息传递系统向用户发送消息之类的事情。 那么,在保持retrier域不可知的同时实现事务感知日志的最佳方法是什么?
例如,我也许可以写类似的东西:
def apply_domain_logic
FirstObject.create!
post_commit { log "first object has been created" }
SecondObject.create!
post_commit { log "second object has been created" }
end
使用post_commit以某种方式保存这些块,然后在成功的情况下使用using_optimistic_concurrency调用这些块。
有没有一种好的方法可以实现相同的目标?