首页 文章

C#中的简单持久性消息队列用于单个进程

提问于
浏览
0

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

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

我已经实现了将XML序列化队列写入文件的函数,并且我一直从这个文件中读写 .

我很感激有任何更好的想法来解决这个问题 . 谢谢

3 回答

  • 0

    当然,有一个更好的想法是使用SQLite . 我希望这能帮到您 .

  • 0

    Windows Mobile 6.5设备本身支持不需要安装MSMQ . 顺便说一句:工业领域仍有许多供应商提供基于WM65的设备,所以这还没有过时 .

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

    因此,主线程创建一个MSMQ,您的进程中的一个线程填充MSMQ,另一个线程可以'peek',并且在成功传输后,来自同一MSMQ的'dequeue'消息 . 有关简单示例,请参阅here .

  • 0

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

    关于dequeue:例如,假设我有一个包含3条消息的队列:“one”,“two”,“three” . 现在我想发送下一个(也是第一个)消息“one” . 我将“一个 - 从队列中删除”一行添加到我的“出列日志”中,然后我从队列对象中将“一个”出列,并将其发送到我希望将其发送到的位置 . 当它被发送时,我将“ - 从队列中完成删除”附加到我的“出列日志” . 现在我的日志文件中有一行“一个 - 从队列中删除 - 从队列中删除” .

    无论何时崩溃都没关系,我将始终能够恢复队列对象的状态(至少目前我在这个过程中没有看到任何逻辑错误) . 所以imho它并不棘手,但仍然......一些代码应该被编码 . 这将是几页代码 .

相关问题