2011-09-15 65 views
1

我正在考虑对交货订单至关重要的应用使用AMQP。保留交货订单

因此,我不能使用正常的重新传递功能,因为未传送的消息会无序地重新排队。

它看起来像我必须做的是将邮件留在队列中,直到它被处理,然后明确地删除它。然后有可能相同的消息按顺序处理两次,但这很容易陷入并处理。

但是,我没有看到如何做到这一点。我正在寻找的是一些窥视和删除消息方法,让我直接控制,但他们似乎并不存在。

我错过了什么,或试图以错误的方式解决问题?

回答

0

您不能在AMQP中查看和删除。实际上,您不能浏览队列中的消息而不消耗它们,而Rabbit不提供任何扩展来启用它。

对您的问题的一般回答是“如果您确实需要按顺序约束,请仔细考虑”,因为例如,使用该约束,您不能在队列中拥有多个使用者。

+0

不幸的是订单保存是非常必要的,我说最重要的是它。看看这些文档,它看起来有可能将非确认消息放到一个单独的恢复队列中,以供消费者在开始时检查,不知道我是否理解,尽管如此...... – Roger

+0

您可以做类似的事情,但是如果消费者从死信队列中消费时死亡,你会怎么做?添加另一个*队列*只会将原始问题移到其他地方。 – scvalex

0

我一直在解决同样的问题。在我的解决方案我已经包裹消息转换成一个单个消息其中外消息一直处理的第一然后我有处理在包裹顺序剩余的内部消息 。这有一些缺点,例如大消息(一旦你的包装层次结构包含许多消息),更难以序列化......,但对我来说这个解决方案是足够合适的。