构建具有数据库连接的多线程聚合器的注意事项

本文关键字:注意事项 多线程 数据库连接 构建 | 更新日期: 2023-09-27 18:20:49

我有兴趣构建一个c#控制台应用程序,该应用程序将连接到Twitter的公共流API并将tweet保存到MSSQL数据库。我想看看是否有人介意确认我是否正确处理了这个问题。

我设想流式API连接在自己的线程上异步运行。当收到一条推文时,我想根据业务逻辑(额外的线程)对其进行处理,并假设其有效,将其添加到推文队列(列表)中,该队列最终将被持久化到DB中并清除。以下是应用程序的3个线程

  • 后台工作人员正在收听流的新推文
  • 后台工作人员根据业务逻辑处理推文并添加到推文队列
  • 后台工作人员负责每隔N秒保存一次队列,然后清除队列

我认为tweet队列变量需要是静态的并且是线程安全的。也许还有数据库连接和流对象?我很确定在访问时必须锁定线程安全变量,我需要担心死锁吗?我还缺少其他考虑因素吗?

提前感谢您的帮助和见解

构建具有数据库连接的多线程聚合器的注意事项

在我的情况下,我不会从头开始构建一个排队系统,因为市场上有很多免费或非常便宜的选项。

一个线程将监听tweet,并将其排入持久排队解决方案。其他或许多线程将订阅tweet队列,使用域层将tweet存储到您自己的数据库存储中。

由于您是.NET开发人员,我会查看Microsoft Azure的服务总线服务,因为它是一个理想的解决方案,因为它支持生产者/消费者模式,甚至支持传统队列,并且在主题(生产者/消费者)的情况下,您有一个完整的事务消息系统,可以将您的解决方案变成可靠的基础设施。

此外,您应该期待实现Windows服务,而不是控制台应用程序。查看TopShelf,这是一个开源框架,可以轻松开发Windows服务。