私は現在、多くのクライアント アプリケーションが短いメッセージを送信する TCP リスナーを作成しています。私が持っている TCP リスナーは C# の winform であり、これらのログをバッチで処理して、キューで受信するすべてのメッセージでデータベースにヒットしないようにする必要があります。現在、リスナーで受信するすべてのメッセージで、C# キュー クラスを使用してエンキューを実行しています。
別のスレッドが 5 分ごとに実行され、このキューをチェックし、キューに入れられたアイテムがある場合はキューの処理を開始します。この設計には同時実行/競合状態の問題があるようです。5 分間のスレッドが開始されると、受信される新しいメッセージは、DeQueue 中にロックされているため、Queue にアクセスできなくなります。したがって、これらの新しいメッセージは失われます。TCP リスナーに大量のメッセージが送信されている場合にのみ発生しているようです。
これは私の側の設計に欠陥があると思う人はいますか、それとももっと良い解決策があるでしょうか? メッセージを送信しているクライアント アプリケーションからの制限に基づいて、MSMQ または WCF を使用することは許可されていません。