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

时间:2008-08-28 17:21:22

标签: msmq messaging activemq

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

  • 火与忘记
  • 持久的消息集,可能会更新,留在那里直到发件人说要删除它们

库将用C#编写。 Spring.NET刚刚发布了一个具有大量优秀消息抽象的里程碑版本,这很棒 - 我计划广泛使用它。我的基本问题归结为消息经纪人的问题。我的架构看起来像app - >消息代理队列 - >侦听的服务器应用程序,将所有消息分派到他们需要去的地方,并处理那些长期存在的消息的生命周期 - >消息代理队列或主题 - >听力应用程序。

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

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

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

5 个答案:

答案 0 :(得分:22)

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

ActiveMQ的其他一些好处包括

你提到的主要缺点是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

答案 1 :(得分:13)

MSMQ的优点。

  • 内置于Windows
  • 它支持事务,它还支持没有事务的队列
  • 设置起来非常简单
  • AD集成
  • 速度很快,但您需要将ActiveMQ和MSMQ与流量进行比较才能知道哪个更快。
  • .NET支持它诞生
  • 支持火灾并忘记
  • 如果你有看的读者,你可以偷看队列。不确定是否可以编辑队列中的消息。

缺点:

  • 4MB邮件大小限制
  • 2GB队列大小限制
  • 队列项目保存在磁盘上
  • 不是主流的MS产品,文档有点不确定,或者自从我使用它以来已经过了几年。

这是MSMQ

的好博客

答案 2 :(得分:7)

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

答案 3 :(得分:3)

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

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

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

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

答案 4 :(得分:3)

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

免费:MantaRay是一个完全符合JMS标准的点对点系统。 Mantaray的一个有趣的部分是你只需要定义消息的去向,MantaRay无论如何都要对它进行路由,以便让你的消息得到它的排序 - 这样它就能更好地抵御消息传递结构中各个节点的故障。

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

保罗/