什么开源消息队列软件提供了严格排序的持久性
本文关键字:排序 持久性 消息 开源 队列 软件 什么 | 更新日期: 2023-09-27 17:59:12
我们需要的是RabbitMQ,它实际上是一个队列,而不是这样做。消息应该保持在队列的开头,直到客户端明确地将它们排到队列之外。
这似乎是一个非常简单的场景,但由于某种原因,我找不到任何代理来支持它。代理应该在Windows操作系统上运行。
Apache Qpid可能是您的最佳选择。在所有的消息队列中,这个队列有很多有趣的东西,包括严格的排序。
如果只有一条消息有问题,为什么不在处理消息之前将其写入文件(并刷新文件)呢。确认消息后,删除该文件。
如果您担心消息代理崩溃,第一步是将其升级到运行在Erlang R14B02上的RabbitMQ 2.4.1。第二步是对其进行集群,使您有多个服务器充当MQ代理。然后,更改您的应用程序,通过时间戳或保存消息ID来跟踪已处理的消息。然后,如果RabbitMQ重新排队一条消息,您将已经拥有它,并将处理它并记住它。当它第二次出现时,您将忽略它。
您可能需要将预取设置为0才能正常工作。
还有另一种选择。您可以考虑编写自己的RabbitMQ插件,以提供所需的确切行为。Erlang乍一看可能很复杂,但对于一个已经学习了几种语言的经验丰富的程序员来说,学习它并不难。特别是,如果你有Haskell或CAML等语言的函数式编程经验,他们会很快学会足够的Erlang来完成这项工作。
由于Erlang的内部消息传递过程模型,RabbitMQ插件基本上可以做任何他们想做的事情。没有特定的限制插件API,他们需要符合.
换言之,如果RabbitMQ只完成了你所需的99%,那么就认为自己很幸运,只需少量的工作,你就可以利用这99%,实现你所需要的一切。但为了做到这一点,您必须摆脱RabbitMQ是您使用系统的包安装工具安装的另一个包的想法。在像您这样的情况下,RabbitMQ应该被视为一个任务关键型工具,您应该从源代码安装Erlang和RabbitMQ,并根据您的需求配置它们,而不让您的操作系统限制您。
RabbitMQ自2.7.0版本起也支持严格排序,因此应该再次成为您的场景的一个选项。