我正在为我们的产品开发消息/通知系统.基本要求是:
火与忘记
持久性消息集,可能更新,留在那里直到发送者说要删除它们
这些库将用C#编写.Spring.NET刚刚发布了一个具有大量优秀消息抽象的里程碑版本,这很棒 - 我计划广泛使用它.我的基本问题归结为消息经纪人的问题.我的架构看起来像应用程序 - >消息代理队列 - >侦听的服务器应用程序,将所有消息分派到他们需要去的地方,并处理那些长期消息的生命周期 - >消息代理队列或主题 - >监听应用.
最后,问题是:我应该使用哪个消息代理?我偏向于ActiveMQ - 我们在上一个项目中使用它并喜欢它.我不能想到对它的单一攻击,除了它是Java,并且需要在某个地方的服务器上安装java,这对于将使用这项服务的一些人来说可能很难卖.我一直在关注的另一个选择是MSMQ.我出于某种未知原因对它有偏见,而且它似乎也没有很好的多播支持.
有没有人用MSMQ这样的东西?任何利弊,可能会以某种方式影响投票的东西?
最后一点,我们使用的是.NET 2.0.
我在使用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中
MSMQ的优点.
它内置于Windows中
它支持事务,它还支持没有事务的队列
这很容易设置
AD集成
速度很快,但您需要将ActiveMQ和MSMQ与流量进行比较才能知道哪个更快.
.NET支持它诞生
支持火灾和忘记
如果你有看的读者,你可以偷看队列.不确定是否可以编辑队列中的消息.
缺点:
4MB邮件大小限制
2GB队列大小限制
队列项目保存在磁盘上
不是主流的MS产品,文档有点不确定,或者自从我使用它以来已经过了几年.
这是MSMQ的一个很好的博客
看看zeromq吧.它是最快的消息队列之一.