构建具有数据库连接的多线程聚合器的注意事项
本文关键字:注意事项 多线程 数据库连接 构建 | 更新日期: 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服务。