在Windows上排队MSMQ的队列?

时间:2008-09-01 07:46:44

标签: .net msmq soa messaging

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

还有其他选择吗?

8 个答案:

答案 0 :(得分:17)

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

进行

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

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

MSMQ不起作用的一些原因:

  1. 当您需要将队列的逻辑更改为非FIFO时,但是“最旧的RED消息”或“最早的BLUE消息”之类的内容时,您无法执行此操作。 (我知道人们会说什么,你可以通过红色队列蓝色队列来实现..但是,如果队列的数量/类型是基于动态的,那该怎么办?在管理应用程序和每天更改的方式?)

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

答案 1 :(得分:10)

我无法开始对Tibco EMS说出足够好的东西 - 这是Java JMS消息传递规范的一个实现。 Tibco EMS对.NET客户端提供了极好的支持 - 包括WinCE上的Compact Framework .NET。 (他们也有C客户端库。)

因此,如果您正在构建涉及在Windows,Unix(AIX / Solaris),Linux或Mac OS X上运行的消息传递代码的异构分布式应用程序,则可以使用Tibco EMS。

点击此处查看我的文章:

Using JMS For Distributed Software Development

我曾经在微软工作,并在那里与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工业嵌入式计算机。)

Links To My JMS Writings

答案 2 :(得分:9)

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

答案 3 :(得分:7)

SQL 2005的service broker怎么样?

答案 4 :(得分:3)

如果费用不是问题(还有Express SKU ),那么看看800,000磅的大猩猩。 WebSphere MQ(MQ系列)。它几乎可以在任何平台上运行,并支持许多不同的队列管理器和消息传递模式,因此在这里列出它们是不合适的。

答案 5 :(得分:3)

为什么不使用ActiveMQ? :)

答案 6 :(得分:1)

如果高可用性很重要,亚马逊SQS值得关注。如果消息来自不同的物理位置,则没有太多额外的开销。便宜又可扩展!

答案 7 :(得分:1)

Redis是这个平台上的另一个热门品种。检查基于Set的排队实现以及Pub / Sub模式。看起来很有希望