多播、消息传递、ActiveMQ 与 MSMQ?

Posted

技术标签:

【中文标题】多播、消息传递、ActiveMQ 与 MSMQ?【英文标题】:Multicasting, Messaging, ActiveMQ vs. MSMQ? 【发布时间】:2010-09-07 03:59:08 【问题描述】:

我正在为我们的产品开发消息/通知系统。基本要求是:

一劳永逸 持久的消息集,可能会更新,一直保留在那里,直到发件人说要删除它们

这些库将用 C# 编写。 Spring.NET 刚刚发布了一个里程碑式的构建,其中包含许多不错的消息抽象,这很棒——我计划广泛使用它。我的基本问题归结为消息代理的问题。我的架构将类似于应用程序 -> 消息代理队列 -> 服务器应用程序,它侦听、将所有消息分派到它们需要去的地方,并处理那些长期存在的消息的生命周期 -> 消息代理队列或主题 -> 侦听应用程序。

最后,问题是:我应该使用哪个消息代理?我偏向于ActiveMQ - 我们在上一个项目中使用它并且喜欢它。除了它是 Java 并且需要将 Java 安装在某处的服务器上之外,我真的想不出任何针对它的攻击,这对于某些将使用该服务的人来说可能很难卖。我一直在寻找的另一个选项是 MSMQ。由于某种未知的原因,我对它有偏见,而且它似乎也没有很好的多播支持。

有人用过 MSMQ 吗?任何利弊,可能会以某种方式影响投票的东西?

最后一件事,我们使用的是 .NET 2.0。

【问题讨论】:

【参考方案1】:

看看zeromq。它是最快的消息队列之一。

【讨论】:

【参考方案2】:

在那个舞台上有很多选择......

免费:MantaRay 是一个完全符合 JMS 的对等系统。 Mantaray 有趣的部分是您只需要定义消息的去向,并且 MantaRay 无论如何都会路由它,以便将您的消息发送到它的目的地 - 因此它更能抵抗消息传递结构中各个节点的故障。

付费:在我的日常工作中,我管理一个具有数百个节点的 IBM WebSphere MQ 消息传递系统,并且发现它非常好。我们最近还购买了 Tibco EMS,它似乎也很好用。

保罗/

【讨论】:

【参考方案3】:

我建议您看看 TIBCO Enterprise Messaging Service - EMS,它是一种高性能的消息传递产品,支持多播、路由、支持 JMS 规范并提供企业范围的功能,包括您的要求,例如 fire-forget 和使用文件的消息持久性/database 使用共享状态。

作为参考,FEDEX 在 TIBCO EMS 上运行 作为其消息传递基础架构。

http://www.tibco.com/software/messaging/enterprise_messaging_service/default.jsp

如果我提供了很多其他的参考资料,你真的会感到惊讶。

【讨论】:

【参考方案4】:

我在ActiveMQ 上工作时有点偏见,但上面列出的 MSMQ 的几乎所有好处也确实适用于 ActiveMQ。

ActiveMQ 的更多好处包括

大力支持cross language client access and multi protocol support 对enterprise integration patterns的出色支持 一大堆advanced features 像exclusive queues 和message groups

您提到的主要缺点是 ActiveMQ 代理是用 Java 编写的;但如果你真的想要,你可以在 IKVM 上将它作为 .net 程序集运行 - 或者将它作为 Windows 服务运行,或者通过 GCJ 将其编译为 DLL/EXE。 MSMQ 可能是用 .NET 编写的,也可能不是——但它的实现方式并不重要?

无论您选择 MSMQ 还是 ActiveMQ,我都建议您至少考虑使用 NMS API,正如您所说,它已很好地集成到 Spring.NET 中。这个 API 有一个 MSMQ 实现,以及 TibCo、ActiveMQ 和 STOMP 的实现,它们将通过StompConnect 支持任何其他 JMS 提供程序。

因此,通过选择 NMS 作为您的 API,您将避免锁定任何专有技术 - 然后您可以随时轻松地切换消息传递提供商;而不是将您的代码全部锁定在专有 API 中

【讨论】:

【参考方案5】:

MSMQ 的优点。

Windows 内置 它支持事务,也支持没有事务的队列 设置非常简单 广告集成 它很快,但您需要比较 ActiveMQ 和 MSMQ 以了解您的流量哪个更快。 .NET 原生支持它 支持一劳永逸 如果您有只看的读者,您可以查看队列。不确定您是否可以编辑队列中的消息。

缺点:

4MB 消息大小限制 2GB 队列大小限制 队列项目保存在磁盘上 不是主流的 MS 产品,文档有点问题,或者我用了几年了。

这是MSMQ的好博客

【讨论】:

MSMQ:只有在使用持久消息时,队列项才会保存在磁盘上。我认为 ActiveMQ 也是如此。

以上是关于多播、消息传递、ActiveMQ 与 MSMQ?的主要内容,如果未能解决你的问题,请参考以下文章

消息队列协议:PGM 与 UDP

关于ActiveMQ的配备怎么解决

(转)关于ActiveMQ的配置

MSMQ 事务性消息传递如何工作?

消息中间件之JMS实践(ActiveMQ)

MSMQ(Microsoft Message Queue)