后台服务尝试计数机制

时间:2014-03-12 12:22:31

标签: sql design-patterns error-handling windows-services background-process

有一个.net Windows服务,它处理ms sql server中表中的部分数据。

显然,有时在事务期间会发生错误,然后我想跳过失败的记录并稍后返回。第一种方法是使用AttemptsCount列,在出错时递增它并在select查询中检查它的值。但是有一些问题,比如如何在回滚期间保存AttemptsCount等。

那么这种情况的补偿机制有哪些方法呢?在消息队列,sql作业的情况下,我很清楚,但Windows服务使用sql。感谢。

1 个答案:

答案 0 :(得分:0)

如果您的记录具有商业价值,那么我不太乐意将其与仅限技术的专栏(例如AttemptsCount)混合使用。所以你的回滚问题只是打破设计原则的“应得的惩罚”。

如何创建一种错误日志,保存发生错误的记录的记录ID。您可以以任何方式实现它:一个额外的表,一个队列,......然后您可以按时间处理错误日志(“我想...稍后再返回”)。当然,您应该写入此日志,而不是在原始事务本身内,而是在其外部。

因此,您将达到几个目标:

  • 将您的业务数据(记录)与技术数据(错误信息)分开
  • 将你的错误处理“推广”到某种业务流程 - 就前一点而言,这听起来很有趣,但同时也是如此:) - 这个过程是独立的。
  • 您可以为其提供更多逻辑,例如记录每个错误的时间戳,将所有错误存储到存档,执行一些错误统计,......