什么开源消息队列软件提供了严格排序的持久性?
Posted
技术标签:
【中文标题】什么开源消息队列软件提供了严格排序的持久性?【英文标题】:What open source message queuing software provides durability with strict ordering? 【发布时间】:2011-09-16 04:27:57 【问题描述】:我们需要的是 RabbitMQ,它实际上是一个队列 @987654321@。消息应该保留在队列的头部,直到客户端明确地将它们出列。
这似乎是一个非常简单的场景,但由于某种原因,我找不到任何代理来支持它。代理应该在 Windows 操作系统上运行。
【问题讨论】:
你真正的业务/应用场景是什么? WCF 也可以配置为使用队列。 你的链接好像坏了,你指的是什么? 【参考方案1】:如果只有一条消息是问题所在,为什么不在处理消息之前将其写入文件(并刷新文件)。确认消息后,删除文件。
如果您担心消息代理崩溃,第一步是将其升级到在 Erlang R14B02 上运行的 RabbitMQ 2.4.1。第二步是对它进行集群化,以便您有多个服务器充当 MQ 代理。然后,更改您的应用程序以通过时间戳或通过保存消息 ID 来跟踪已处理的消息。然后,如果 RabbitMQ 重新排队一条消息,您将已经拥有它并将处理它并记住它。当它第二次出现时,您将忽略它。
您可能需要将 prefetch 设置为 0 才能正常工作。
还有另一种选择。您可以考虑编写自己的 RabbitMQ 插件来提供您需要的确切行为。 Erlang 乍一看可能看起来很复杂,但对于已经学习过几种语言的经验丰富的程序员来说,学习它真的不难。特别是,如果您有任何人在 Haskell 或 CAML 等语言方面具有函数式编程经验,他们会很快掌握足够的 Erlang 来完成这项工作。
由于 Erlang 的消息传递过程的内部模型,RabbitMQ 插件基本上可以做任何他们想做的事情。他们不需要遵守特定的受限插件 API。
换句话说,如果 RabbitMQ 只完成了您需要的 99%,请认为自己很幸运,只需少量工作,您就可以利用这 99% 并实现所需的一切。但是为了做到这一点,您必须摆脱 RabbitMQ 是您使用系统的软件包安装工具安装的另一个软件包的想法。在像你这样的情况下,RabbitMQ 应该被认为是一个关键任务工具,你应该从源代码安装 Erlang 和 RabbitMQ,并根据你的需要配置它们,而不会让你的操作系统限制你。
【讨论】:
【参考方案2】:Apache Qpid 可能是您的最佳选择。在所有的消息队列中,这个队列有很多有趣的地方,包括strict ordering。
【讨论】:
【参考方案3】:RabbitMQ 还支持strict ordering as of release 2.7.0,因此应该再次成为您的方案的一个选项。
【讨论】:
以上是关于什么开源消息队列软件提供了严格排序的持久性?的主要内容,如果未能解决你的问题,请参考以下文章