还有其他替代方案吗?
还有其他替代方案吗?
可能不是“最佳实践”建议...但基于实际需求和经验:
我们有分布式系统,60个箱子每个运行10个客户端都执行任务X,并且他们需要从队列中获取下一个任务。队列由另一个“客户端”提供...
我们曾使用过进程间通信,尝试了 MSMQ 和服务代理,但长期来看都无法解决问题,因为你将应用程序的控制权交给了微软。只要满足你的需求它就工作得很好,但当你需要一些不支持的东西时,它就会变得糟糕。
对我们而言,最好的解决方案是:使用 SQL 数据库表作为队列。不要重新发明轮子,因为你会犯错误(锁定)。有关如何完成此操作的信息已经在网上,非常容易,我们处理了每天超过 200K 条消息(同时有 60x10 = 600 个并发读写队列)。这是在同一台 SQL 服务器处理应用程序其他内容的基础上进行的...
MSMQ 不起作用的一些原因:
当你需要更改队列逻辑以不是先进先出(FIFO),而是像“最古老的 RED 消息”或“最老的 BLUE 消息”这样的东西时,你无法做到。(我知道人们会说,你可以通过拥有“红队列”和“蓝队列”来做到...但如果队列的数量/类型是根据应用程序的管理方式动态改变并且每天都在变化怎么办?)
它增加了一个故障点和部署噩梦(队列是一个故障点,你需要处理设置所有盒子的正确权限以读/写消息等等,在企业软件中,你为这些类型的事情付出了巨大的代价)。SQL 服务器...所有客户端都已经从数据库中读取/写入,只是再加一个表而已。
我无法表达关于Tibco EMS的好评。Tibco EMS是Java JMS消息规范的一个实现。Tibco EMS对.NET客户端具有出色的支持,包括WinCE上的紧凑框架.NET。(他们也有C客户端库。)
因此,如果您正在构建涉及在Windows、Unix(AIX/Solaris)、Linux或Mac OS X上运行的消息代码的异构分布式应用程序,那么Tibco EMS就是最佳选择。
查看我的文章:
我曾经在微软工作过,并且在那里进行了一些MSMQ的实现。但是你知道,微软只关心Windows。他们依赖第三方为其他平台提供MSMQ客户端。我与Tibco EMS的接触是一个更好的经验。显然,Tibco比Microsoft更了解消息传递。而且Tibco还努力支持各种客户端绑定。这就是为什么他们最终将产品名称从Tibco JMS更改为Tibco EMS(企业消息服务)的原因。
我确实建立了围绕Tibco EMS的异构软件系统。通过Tibco EMS消息交互,滚动C# .NET Winform客户端与Java/JBoss中间件。 (还有使用紧凑框架。.NET Tibco客户端的WinCE工业嵌入式计算机。)
RabbitMQ框架似乎在这里被忽视了。如果有人仍然关心,它具有.NET 2.0代码基础,并且配备了类似于netMsmqBinding的WCF绑定。该绑定自然需要至少.NET 3.0,并且比内置的netMsmqBinding具有更多功能。最重要的是,它对Mono也很友好。这值得一看。
VMS
上使用 C
编程语言的 Websphere MQ - 它非常稳健。 - MattRedis是这个平台上另一个热门品种。请查看他们基于Set的队列实现以及Pub/Sub模式。它看起来很有前途。