c# - 用于连接互联网的分布式 C# 客户端的消息队列解决方案

标签 c# scalability msmq

我正处于研究 C# 消息队列解决方案的初始阶段,如果有任何经验、教训、 war 故事等,我将不胜感激。我还有几个关于 MSMQ 是否适合我们的配置的具体问题。

简而言之,我们有一个分布式架构:各种服务器端事件生成工作项,这些工作项由我们部署的客户端检索。这些客户端连接到服务器,检索工作并处理它,然后返回“等待工作完成”。

关于这些客户的一些相关细节:

  1. 我们今天安装了数百个客户端,需要为在未来 18 个月内增长到数万个做好准备。
  2. 客户端从不向服务器提交任务——它们是“仅拉”。
  3. 每个客户端的有效负载 <= 1K。
  4. 我们不需要重量级身份验证,也不需要流量加密(尽管这是一个很好的奖励)
  5. 我们的客户在各种 MS 操作系统上运行,>= WinXP-SP1。有些是 Windows 事件目录、Windows 域或临时工作组的一部分。
  6. 大多数情况下,客户是闲置的。我们希望高效地“等待工作”,然后尽快响应工作(即,我们希望客户在排队后尽快收到工作项)
  7. 有时,我们的客户会从互联网上消失一段时间:他们的机器会关闭一天或一整夜等。我们希望工作项目在他们重新上线时到达。换句话说,我们确实需要消息的可靠性。
  8. 我们控制所有客户端和服务器代码,但不控制客户端环境(尽管我们的安装程序会安装必备软件,如 .NET 3.5,如果还没有的话)

那么,鉴于上述情况 - MSMQ 会“自然地”为我们工作吗?对于 MSMQ 如何(或是否)处理客户端不在域/事件目录中以及通过 Internet 连接时监听消息的问题,我还没有找到明确的答案。到目前为止,我对 MSMQ 的阅读感觉相当“以企业为中心”——我们的非企业需求会成为 MSMQ 的问题吗?

您过去在类似设置中使用过哪些其他解决方案?

当然,我还应该问哪些其他问题? ;-)

谢谢!

最佳答案

RabbitMQ 听起来像是适合您的解决方案。

RabbitMQ

RabbitMQ .NET/WCF Library

关于c# - 用于连接互联网的分布式 C# 客户端的消息队列解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922378/

相关文章:

c# - 如何在 slider 上画线或其他东西?

c# - Linq to Entity 比较字符串忽略空格

c# - 我该怎么做才能加快连接到我的 SQL 在线数据库(("pairing"速度,而不是查询速度)?

java - oracle coherence 的开源替代方案?

ios - WhatsApp 等应用程序如何摆脱 Apple 推送通知服务的连接限制?

c# - 使用 msmq 和 wcf

c# - 类型上的 EF 核心实体

postgresql - nginx/node.js/postgres 是一个非常可扩展的架构吗?

c# - 如何通过工作组连接到 MSMQ?

wcf - Windows Azure 队列、WCF、MSMQ 集成