多播、消息传递、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?的主要内容,如果未能解决你的问题,请参考以下文章