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

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

Multicasting, Messaging, ActiveMQ vs. MSMQ?

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

  • 忘却
  • 永久的消息集(可能会更新)留在那里,直到发件人说要删除它们为止

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

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

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

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


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

ActiveMQ的其他优点包括

  • 对跨语言客户端访问和多协议支持的强大支持
  • 对企业集成模式的出色支持
  • 大量的高级功能,例如互斥队列和消息组

您提到的主要缺点是ActiveMQ代理是用Java编写的。但如果确实需要,可以将其作为.net程序集在IKVM上运行-或将其作为Windows服务运行,或者通过GCJ将其编译为DLL / EXE。 MSMQ可能会或可能不会用.NET编写-但是它的正确实现方式并没有多大关系?

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

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


MSMQ的优点。

  • Windows内置
  • 它支持事务,也支持没有事务的队列
  • 真的很容易设置
  • 广告整合
  • 它的速度很快,但是您需要比较ActiveMQ和MSMQ的流量,以了解哪种速度更快。
  • .NET支持它的诞生
  • 支持失火
  • 如果您有只看的读者,则可以窥视队列。不知道是否可以编辑队列中的消息。

缺点:

  • 邮件大小限制为4MB
  • 2GB队列大小限制
  • 队列项目保存在磁盘上
  • 它不是主流的MS产品,文档还是有些杂乱无章,或者自从我使用它已经有几年了。

这是MSMQ的好博客


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


那个领域有很多选择...

免费:MantaRay对等点完全兼容JMS的系统。 Mantaray有趣的部分是,您只需要定义消息的去向,MantaRay便将消息路由到任何地方,从而将您的消息发送到目的地-因此,它更能抵抗消息传递结构中各个节点的故障。

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

保罗/


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

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

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

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


推荐阅读