我们需要的是实际作为队列and doesn't do this的RabbitMQ。消息应该保留在队列的头部,直到客户端明确地将它们出列。
这似乎是一个非常简单的场景,但由于某种原因,我找不到任何支持它的代理..代理应该在Windows操作系统上运行。
答案 0 :(得分:2)
如果只有一条消息是问题,为什么不在处理消息之前将其写入文件(并刷新文件)。在确认消息后,删除该文件。
如果您担心消息代理崩溃,第一步是将其升级到在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,并根据你的需要配置它们,而不要让你的操作系统限制你。
答案 1 :(得分:2)
Apache Qpid可能是您的最佳选择。在所有消息队列中,有一个有趣的事情,包括strict ordering。
答案 2 :(得分:2)
RabbitMQ也支持strict ordering as of release 2.7.0,因此应该再次为您的方案选择。