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

时间:2014-09-06 15:48:07

标签: c# database multithreading

我有兴趣构建一个c#控制台应用程序,它将连接到Twitter的公共流API并将推文保存到MSSQL数据库。我想知道是否有人不介意确认我是否正确接近这一点。

我正在设想流API连接在其自己的线程上异步运行。当收到推文时,我想根据业务逻辑(附加线程)处理它并假定有效,将其添加到最终将持久保存到数据库并清除的推文队列(List)中。以下是应用程序的3个线程

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

我相信tweet-queue变量需要是静态的和线程安全的。也许数据库连接和流对象也是如此?我很确定在访问时我必须锁定线程安全变量,我是否需要担心死锁?我还缺少其他考虑因素吗?

提前感谢您的帮助和见解

1 个答案:

答案 0 :(得分:0)

就我而言,我不会从零开始建立一个排队系统,在市场上有很多免费或非常便宜的选择。

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

由于您是.NET开发人员I would check Microsoft Azure's Service Bus service,因为它是一个理想的解决方案,因为它支持生产者/消费者模式甚至传统队列,并且在主题(生产者/消费者)的情况下,您已经一个完整的事务性消息传递系统,可以将您的解决方案转变为可靠的基础架构。

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