在其他一切工作时处理离线数据库
本文关键字:处理 离线 数据库 工作 其他 | 更新日期: 2023-09-27 18:11:09
我有一个Windows服务监视几个邮箱的新邮件。一旦新邮件到达,服务就负责决定如何处理它。它可以解析它并将其输入数据库,忽略它,或者将它转发给不认识它的人。
我已经有一个工作的实现,如果/当我们的电子邮件服务器宕机,服务将尝试重新连接每n分钟,直到成功。另一个问题是如果数据库服务器宕机会发生什么。我们的服务很可能仍然在运行和解析电子邮件,但如果数据库插入失败,将会停止。
如何处理数据库宕机?我没有让我的服务负责与数据库交互,而是使用像NServiceBus这样的消息传递框架,并为每个需要添加的新项目发送消息。然后这个服务将尝试处理它。如果处理由于某种原因失败(很可能是数据库宕机),只需将项目留在队列中稍后再处理即可?
一种可能性:
如果数据库关闭,将完成的工作序列化为XML或二进制格式,并在数据库关闭时将其存储在文件系统中。将其视为脱机队列。当数据库恢复时,让进程反序列化数据,然后将其存储在数据库中。
这样,您仍然可以认为数据已处理,并在稍后插入它。队列(备份)是文件系统。