如果你想在Windows下使用排队产品进行持久消息传递,运行.NET 2.0及更高版本,那么今天存在哪些MSMQ替代品?我知道ActiveMQ(http://activemq.apache.org/),我看过WSMQ的引用(指向http://wsmq.net),但该网站似乎已经关闭.
还有其他选择吗?
可能不是这里的"最佳实践"建议......但是基于现实生活中的需求和经验:我们有分布式系统,每10个客户运行60个盒子,所有人都执行任务X,他们需要从队列中接受下一个任务.队列正在从另一个"客户端"馈送......
我们曾经使用过程间通信,我们使用了MSMQ,我们尝试过服务代理......它只是长期不起作用,因为你放弃了对微软的应用程序的控制.只要您的需求得到满足,它就会很好用.当你需要一些不受支持的东西时,它会成为地狱.
对我们来说最好的解决方案是:使用SQL数据库表作为队列.不要在那里重新发明轮子,因为你会犯错误(锁).有关于如何操作的信息,它非常简单,我们每24小时处理超过200K消息(60x10 = 600并发读取和写入队列).这是除了处理其余应用程序内容的同一SQL服务器之外......
MSMQ不起作用的一些原因:
当您需要将队列的逻辑更改为FIFO而不是"最旧的RED消息"或"最旧的BLUE消息"时,您无法执行此操作.(我知道人们会说什么,你可以通过拥有一个红色队列和一个蓝色队列来实现 ......但是,如果队列的数量/类型是动态的,基于应用程序的管理方式并且每天都在变化怎么办?)
它增加了一个故障点和部署噩梦(队列是一个失败的点,你需要处理在所有盒子上设置正确的权限以读取/写入消息等'你在血液中为这些类型的东西支付的企业软件) .SQL服务器......所有客户端都已经从DB中写入/读取,它只是一个表...
我不能开始说一些关于Tibco EMS的好东西 - 一个Java JMS消息传递规范的实现.Tibco EMS对.NET客户端提供了极好的支持 - 包括WinCE上的Compact Framework .NET.(他们也有C客户端库.)
因此,如果您正在构建涉及在Windows,Unix(AIX/Solaris),Linux或Mac OS X上运行的消息传递代码的异构分布式应用程序,那么就可以使用Tibco EMS.
看看我的文章:
使用JMS进行分布式软件开发
我曾经在微软工作,并在那里与MSMQ做了一些实现.但是你知道,微软只关注Windows.他们依靠第三方为其他平台提供MSMQ客户端.我与Tibco EMS的相遇是一次更好的体验.很明显,Tibco比微软更了解消息.Tibco致力于支持各种客户端绑定.这就是为什么他们最终将产品名称从Tibco JMS更改为Tibco EMS(企业消息服务).
我确实围绕Tibco EMS构建了异构软件系统.滚动C#.NET Winform客户端通过Tibco EMS消息传递与Java/JBoss中间层交互.(还有使用Compact Framework .NET Tibco客户端的WinCE工业嵌入式计算机.)
链接到我的JMS作品
RabbitMQ框架似乎在这里被忽略了.如果人们仍然关心,它确实有一个.NET 2.0代码库,它带有类似于netMsmqBinding的WCF绑定.绑定自然至少需要.NET 3.0,它具有比内置netMsmqBinding更多的功能.最重要的是,它是Mono友好的.值得一看.
那么SQL 2005的服务代理呢?