针对单个进程的C#中的简单持久消息队列

本文关键字:消息 队列 简单 单个 进程 | 更新日期: 2023-09-27 17:58:58

我正在用C#为Windows Mobile做一个简单的消息系统。该应用程序包括使用Web服务通信发送和接收简单的文本消息。消息队列应该是持久的,避免在与web服务的连接失败或应用程序崩溃时丢失数据。

我知道MSMQ、RabbitMQ、DotNetMQ,但它们应该安装在设备中,这是非常简单的设备,我不想为了这个简单的任务在每个手机中安装任何其他工具。

我已经实现了将包含消息的XML序列化队列写入文件的功能,并且我一直在这个文件中读写。

如果有更好的办法来解决这个问题,我将不胜感激。感谢

针对单个进程的C#中的简单持久消息队列

MSMQ在Windows Mobile 6.5设备上本机支持。BTW:在工业区仍然有许多供应商提供基于WM65的设备,所以这还没有过时。

基于Windows Mobile(CE)的MSMQ持久且易于使用。它通常用于设备上的进程间通信或客户端-服务器通信(需要在"服务器"上安装MSMQ)。

因此,主线程创建一个MSMQ,进程中的一个线程填充MSMQ,另一个线程可以"窥视",并且在成功传输后,从同一MSMQ"出列"消息。请参阅此处获取一个简单的示例。

我真的不知道Windows Mobile有什么可用的,但你可以尝试使用带有两个文件的基本队列(正常或并发,取决于你的应用程序)。将所有排队的内容写入一个"入队日志"文件,将所有出队的内容写入另一个"出队日志"。这两个文件总是可以为您提供足够的信息来恢复队列,并且您不需要完全重写/完全序列化队列。不过,它需要手工实现。

关于出列:例如,假设我有一个包含3条消息的队列:"一"、"两"、"三"。现在我想发送下一条(也是第一条)消息"一"。我将"一-开始从队列中删除"这行附加到我的"出列日志"中,然后将"一"从队列对象中出列,并将其发送到我希望发送的位置。发送时,我将"-完成从队列中的删除"附加到"出队日志"中。现在,我在日志文件中有一行"从队列中一次开始删除-从队列中完成删除"。

我什么时候崩溃并不重要,我将始终能够恢复队列对象的状态(至少目前我在这个过程中没有看到任何逻辑错误)。所以,嗯,这并不棘手,但仍然。。。应该对某些代码进行编码。这将是几页代码。

当然,有一个更好的想法是使用SQLite。我希望这对你有帮助。