其他一切工作时处理脱机数据库?

时间:2011-10-12 16:28:47

标签: c# architecture service

我有一个Windows服务,可以监控多个邮箱以获取新邮件。一旦新邮件到达,服务负责确定如何处理它。它可以解析它并将其输入数据库,忽略它,或者如果它不能识别它就转发给某人。

如果/当我们的电子邮件服务器出现故障时,我已经有了一个有效的实现,服务将尝试重新连接每个 n 分钟,直到成功为止。另一个问题是如果/当数据库服务器出现故障时会发生什么。我们的服务很可能仍在运行和解析电子邮件,但如果数据库插入失败则会停止。

如何处理数据库故障?我不是让我的服务负责与数据库交互,而是使用像NServiceBus这样的消息传递框架,并为需要添加的每个新项目发送消息。然后这个服务会尝试并处理它。如果由于某种原因处理失败(很可能数据库已关闭),只需将该项留在队列中以便稍后处理?

1 个答案:

答案 0 :(得分:2)

一种可能性:

如果数据库已关闭,请将已完成的工作序列化为XML或二进制格式,并在数据库关闭时将其存储在文件系统中。考虑这个离线队列。当数据库重新启动时,让进程反序列化数据,然后将其存储在数据库中。

这样您仍然可以考虑处理的数据并在以后插入它。队列(备份)是文件系统。