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

时间:2020-03-05 18:44:32  来源:igfitidea点击:

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

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

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

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

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

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

解决方案

回答

MSMQ的优点。

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

缺点:

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

这是MSMQ的好博客

回答

我在使用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中

回答

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

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

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

如果我提供其他参考文献,我们真的会感到惊讶。

回答

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

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

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

保罗/

回答

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