【问题标题】:Embedded systems: Sockets vs MSMQ嵌入式系统:套接字与 MSMQ
【发布时间】:2011-05-12 15:05:39
【问题描述】:
我正在为嵌入式设备开发一些应用程序;它们应该与使用 C# 2.0 嵌入的 Windows CE 5.0 和 XP 兼容。
应用程序应该交换通常代表事件的小消息。
我使用 TCP 套接字和充当调度程序的单独服务器(使用 pub/sub 模式)实现了第一个原型。它有效,但我想知道使用 MSMQ 是否会是一个更好的解决方案。在某些情况下,持久化消息会对我有所帮助,但通常所有事件都应该由目标应用程序立即使用。
我想了解这两种解决方案的优缺点以及一些有助于我做出决定的指导方针。
谢谢
【问题讨论】:
标签:
c#
sockets
.net-2.0
msmq
messagebroker
【解决方案1】:
嗯,消息队列非常适合通过事务队列保证传递。这有助于使您的系统能够抵御崩溃和意外重启。但这通常只有在您可以从此类事故中重新启动应用并能够在再次开始接收消息之前恢复状态时才能正常工作。
这是一个重要的要求。如果你不能满足它,任何有状态的消息都会让机器再次宕机。消息中几乎总是有明确的状态,即使它们的内容不是有状态的,只是通过它们被接收的顺序和改变你的程序状态。这一直是中间件的诅咒,假设网络是可以抽象出来的实现细节的软件在实践中效果不佳。
我觉得 SO 的 this answer 把这个问题表达得特别好。
【解决方案2】:
我倾向于抽象出一个接口并基于接口实现它们并将决策作为配置项。让用户根据他们可能不断变化的需求选择协议。