在Windows上排队替代MSMQ?

时间:2020-03-05 18:45:52  来源:igfitidea点击:

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

还有其他选择吗?

解决方案

回答

SQL 2005的服务代理如何?

回答

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

我们曾经使用过进程间通信,我们曾经使用过MSMQ,我们尝试过服务代理...从长远来看,它是行不通的,因为我们将应用程序的控制权交给了Microsoft。只要需求得到满足,它就可以很好地工作。当我们需要不支持的功能时,它会变成地狱。

对我们来说最好的解决方案是:使用SQL数据库表作为队列。不要在那儿重新发明轮子,因为那样会出错(锁死)。那里有关于如何执行此操作的信息,这非常容易,我们每24小时处理200K消息(其中60x10 = 600个并发读取和写入队列)。这是除了同一台SQL服务器处理其余应用程序内容以外的其他内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

MSMQ无法正常工作的一些原因:

  • 当我们需要将队列的逻辑更改为非FIFO而不是"最旧的RED消息"或者"最旧的蓝色消息"之类的消息时,我们将无法执行此操作。 (我知道人们会说什么,我们可以通过有一个红色队列和一个蓝色队列来做到这一点。但是,如果队列的数量/类型根据应用程序的管理方式和每天变化而动态变化,该怎么办?)
  • 它增加了一个故障点和部署的噩梦(队列是一个故障点,我们需要处理所有框的正确权限,以便在我们为这些类型的事情付钱的企业软件中读取/写入消息等)。 。 SQL Server ...所有客户端都已经在从数据库进行写/读,这只是另外一张表。

回答

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

  • IBM的WebSphere MQ网站:http://www.ibm.com/software/integration/wmq/
  • MQ支持论坛:http://www.mqseries.net/phpBB2/index.php

回答

为什么不使用ActiveMQ? :)

回答

如果高可用性很重要,那么Amazon SQS值得一看。如果消息来自不同的物理位置,则没有太多的额外开销。便宜且可扩展!

回答

关于Tibco EMS(Java JMS消息传递规范的实现),我不能说太多好话了。 Tibco EMS对.NET客户端提供了出色的支持,包括WinCE上的Compact Framework .NET。 (他们也有C客户端库。)

因此,如果我们要构建涉及在Windows,Unix(AIX / Solaris),Linux或者Mac OS X上运行的消息传递代码的异构分布式应用程序,那么Tibco EMS就是最佳选择。

在这里查看我的文章:

使用JMS进行分布式软件开发

我曾经在Microsoft工作,并在那里使用MSMQ进行了一些实现。但是我们知道,微软只是关心Windows。他们依靠第三方来向其他平台提供MSMQ客户。我与Tibco EMS的接触是更好的体验。很明显,Tibco比Microsoft更了解消息传递。 Tibco努力自己来支持各种客户端绑定。这就是为什么他们最终将产品名称从Tibco JMS更改为Tibco EMS(企业消息服务)的原因。

我确实围绕Tibco EMS构建了异构软件系统。滚动式C.NET Winform客户端通过Tibco EMS消息传递与Java / JBoss中间层进行交互。 (并且还有使用Compact Framework .NET Tibco客户端的WinCE工业嵌入式计算机。)

链接到我的JMS著作