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

  • 火灾后忘记
  • 一组持久的消息,可能会更新,保留在那里,直到发件人说删除它们

这些库将用 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,我都建议至少考虑使用 网管接口 正如你所说,它很好地集成到了 Spring.NET 中。该 API 有一个 MSMQ 实现,以及 TibCo、ActiveMQ 和 STOMP 的实现,它们将通过以下方式支持任何其他 JMS 提供程序: Stomp连接.

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

其他提示

MSMQ 的优点。

  • 它内置于 Windows 中
  • 支持事务,也支持无事务的队列
  • 设置非常简单
  • 广告集成
  • 它很快,但您需要比较 ActiveMQ 和 MSMQ 的流量才能知道哪个更快。
  • .NET 支持它的诞生
  • 支持即发即忘
  • 如果您有只是看一眼的读者,您可以查看队列。不确定是否可以编辑队列中的消息。

缺点:

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

这是一个很好的博客 消息队列

看一眼 零MQ. 。它是最快的消息队列之一。

我建议您查看 TIBCO Enterprise Messaging Service - 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,看起来用起来也不错。

保罗/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top