我有一个用 C# 编写的 Windows 服务,它从 MSMQ 读取并根据消息的类型将它们分配给在工作线程中处理该消息的代理。应用程序在没有代理的情况下启动,并在消息到达 MSMQ 时在运行时动态创建
这是它如何工作的基本图:
如果代理工作线程忙于工作,则消息将排队到其本地队列中。到目前为止,一切都很好。但是如果由于某种原因停止了服务,本地队列内容就会丢失。
我试图找出处理这种情况的最佳方法。现在本地队列是一个System.Concurrent.ConcurrentQueue
. 我可能会使用 Sql Ce db 或其他一些持久存储,但我担心性能。我想到的另一件事是只有在代理准备好处理消息时才从 MSMQ 读取,但问题是我不知道 MSMQ 将包含什么消息。
在这个问题上我可以采取哪些可能的方法?