33

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

还有其他选择吗?

4

8 回答 8

20

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

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

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

MSMQ 不起作用的一些原因:

  1. 当您需要将队列的逻辑更改为不是 FIFO,而是像“最旧的 RED 消息”或“最旧的 BLUE 消息”之类的东西时,你不能这样做。(我知道人们会说什么,你可以通过一个红色队列和一个蓝色队列来做到这一点......但是如果队列的数量/类型根据应用程序的管理方式是动态的并且每天都在变化呢?)

  2. 它增加了一个故障点和部署噩梦(队列是一个故障点,您需要处理在所有框上设置正确的权限以在企业软件中读取/写入消息等,您为这些类型的事情付出了鲜血) . SQL 服务器...所有客户端都在从数据库写入/读取,它只是一张表..

于 2008-09-01T08:15:33.563 回答
11

关于 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 著作

于 2008-12-24T07:44:53.203 回答
10

The RabbitMQ framework seems to have been overlooked here. If folks still care, it does have a .NET 2.0 code base and it comes with a WCF binding similar to netMsmqBinding. The binding naturally requires at least .NET 3.0 and it has more features than the built-in netMsmqBinding. On top of it all, it is Mono friendly. Its worth a look.

于 2011-04-15T13:02:58.943 回答
7

SQL 2005 的服务代理呢?

于 2008-09-01T07:51:25.367 回答
3

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

于 2008-09-07T05:51:05.807 回答
3

为什么不使用 ActiveMQ?:)

于 2008-10-17T09:52:28.533 回答
1

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

于 2008-10-26T09:06:19.037 回答
1

Redis is another hot breed on this platform. Check with their Set based queueing implementation and also Pub/Sub pattern. It looks promosing

于 2011-01-28T14:38:58.683 回答