我目前正在编写一个 TCP 侦听器,该侦听器有许多客户端应用程序向其发送短消息。我拥有的 TCP 侦听器是一个 C# winform,我需要做的是批量处理这些日志,以避免在队列中收到的每条消息都命中数据库。目前,对于我在侦听器中收到的每条消息,我都会使用 C# 队列类进行入队。
一个单独的线程将每 5 分钟执行一次以检查此队列,如果有任何排队的项目,则开始处理队列。这种设计似乎存在并发/竞争条件问题,因为当 5 分钟线程启动时,收到的新消息无法再访问队列,因为我在 DeQueue 期间对其进行了锁定。因此,这些新消息会丢失。似乎只有当有大量消息发送到 TCP 侦听器时才会发生。
有没有人认为这是我的一个有缺陷的设计,或者会有更好的解决方案吗?根据发送消息的客户端应用程序的限制,我不允许使用 MSMQ 或 WCF。