在Windows上排队MSMQ的队列?

Tho*_*röm 32 .net messaging soa msmq

如果你想在Windows下使用排队产品进行持久消息传递,运行.NET 2.0及更高版本,那么今天存在哪些MSMQ替代品?我知道ActiveMQ(http://activemq.apache.org/),我看过WSMQ的引用(指向http://wsmq.net),但该网站似乎已经关闭.

还有其他选择吗?

csm*_*mba 18

可能不是这里的"最佳实践"建议......但是基于现实生活中的需求和经验:我们有分布式系统,每10个客户运行60个盒子,所有人都执行任务X,他们需要从队列中接受下一个任务.队列正在从另一个"客户端"馈送......

我们曾经使用过程间通信,我们使用了MSMQ,我们尝试过服务代理......它只是长期不起作用,因为你放弃了对微软的应用程序的控制.只要您的需求得到满足,它就会很好用.当你需要一些不受支持的东西时,它会成为地狱.

对我们来说最好的解决方案是:使用SQL数据库表作为队列.不要在那里重新发明轮子,因为你会犯错误(锁).有关于如何操作的信息,它非常简单,我们每24小时处理超过200K消息(60x10 = 600并发读取和写入队列).这是除了处理其余应用程序内容的同一SQL服务器之外......

MSMQ不起作用的一些原因:

  1. 当您需要将队列的逻辑更改为FIFO而不是"最旧的RED消息"或"最旧的BLUE消息"时,您无法执行此操作.(我知道人们会说什么,你可以通过拥有一个红色队列和一个蓝色队列来实现 ......但是,如果队列的数量/类型是动态的,基于应用程序的管理方式并且每天都在变化怎么办?)

  2. 它增加了一个故障点和部署噩梦(队列是一个失败的点,你需要处理在所有盒子上设置正确的权限以读取/写入消息等'你在血液中为这些类型的东西支付的企业软件) .SQL服务器......所有客户端都已经从DB中写入/读取,它只是一个表...

  • 但是,使用SQL Server并不能替代MSMQ的所有功能.MSMQ正确完成意味着您的60个盒子中的每一个都可以在中央服务器脱机时工作(只要有足够的消息传递以保持它们忙碌).对于您的场景(在线场景中分发工作),SQL是有道理的,但我不确定它是一般的"替代MSMQ". (15认同)
  • 这是一个队列,为什么你想要一个无FIFO队列?这就是队列. (2认同)
  • 更不用说24小时内的200k消息在某些系统中并不算什么. (2认同)

Rog*_*erV 10

我不能开始说一些关于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作品


Six*_*aez 10

RabbitMQ框架似乎在这里被忽略了.如果人们仍然关心,它确实有一个.NET 2.0代码库,它带有类似于netMsmqBinding的WCF绑定.绑定自然至少需要.NET 3.0,它具有比内置netMsmqBinding更多的功能.最重要的是,它是Mono友好的.值得一看.

  • 另外:需要非常简单的Erlang设置. (2认同)

Ubi*_*chi 7

那么SQL 2005的服务代理呢?