多播、消息传递、ActiveMQ与MSMQ的比较?

20

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

  • 发出并忘记
  • 一组持久化的消息,可能会更新,并保留到发送者说要删除它们为止

这些库将用C#编写。Spring.NET最近发布了一个里程碑版本,具有许多不错的消息抽象,这很好 - 我计划广泛使用它。我的基本问题归结为消息代理的问题。我的架构将类似于应用程序->消息代理队列->服务器应用程序监听,将所有消息分派到需要去的地方,并处理这些长寿命消息的生命周期->消息代理队列或主题->监听应用程序。

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

有人用MSMQ做过类似这样的东西吗?有什么优缺点,可能会左右投票的事情吗?

最后一件事,我们正在使用.NET 2.0。

5个回答

22

我有点偏向于ActiveMQ,因为我在 ActiveMQ 上工作,但是上面列出的大部分优点也适用于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 中。


12

MSMQ的优点:

  • 它内置于Windows中
  • 支持事务,也支持没有事务的队列
  • 设置非常容易
  • 与AD集成
  • 它很快,但是您需要比较ActiveMQ和MSMQ以了解哪个更快。
  • .NET本地支持
  • 支持fire and forget
  • 您可以查看队列,如果您有读者只是查看的话。不确定是否可以在队列中编辑消息。

缺点:

  • 4MB的消息大小限制
  • 2GB的队列大小限制
  • 队列项存储在磁盘上
  • 不是主流的微软产品,文档有点模糊,或者说已经过了几年没用它了。

这是一个关于MSMQ的好博客。


MSMQ:仅当您使用持久消息时,队列项才会保存在磁盘上。我认为ActiveMQ也是如此。 - Jonathan Allen

6

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


2
我建议您查看TIBCO企业消息服务 - EMS,这是一个高性能的消息产品,支持多播、路由、支持JMS规范,并提供企业级特性,包括您所需的fire-forget和使用文件/数据库的消息持久化,使用共享状态。
作为参考,联邦快递公司运行在TIBCO EMS作为其消息基础设施。
此外,如果我提供更多参考,您会感到非常惊讶。 http://www.tibco.com/software/messaging/enterprise_messaging_service/default.jsp

2

在这个领域有很多选择...

免费:MantaRay是一个点对点的完全JMS兼容系统。Mantaray的有趣之处在于,您只需要定义消息的目的地,MantaRay就会将其路由到任何可以使您的消息到达其目的地的地方 - 因此它更能抵抗您的消息传递网络中单个节点的故障。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接