我需要在C#服务中实现持久队列。它轮询来自外部源的数据。收到一个数据单元后,它将把它发送到服务器。如果发送失败,它将以队列方式将其写入磁盘并尝试以间隔重新发送它,但也继续轮询数据,从而保持填满队列。我需要将其保存到磁盘,因为网络可能会失败,同时服务器可能会关闭。导致重新启动服务,从而删除内存中队列。 (当然,在重启期间不会进行轮询,但之前网络故障期间的数据将丢失)。
我现在通过在Sql CE中实现队列来解决这个问题。在轮询数据之后,它直接将其写入sql ce数据库,然后另一个线程读取(查看)数据库并尝试发送数据。如果它设法发送它,则消息会出列。我觉得这个解决方案很重,而且效率不高。
有没有人有过类似场景的经验以及如何以更好的方式实现它的技巧?