组播,消息传递,ActiveMQ与MSMQ?
我正在为我们的产品开发消息传递/通知系统。基本要求是:
- 忘却
- 永久的消息集(可能会更新)留在那里,直到发件人说要删除它们为止
这些库将用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。它是最快的消息队列之一。