我正在浏览由Rabbitmq官方网站提供的AMQP的文档。上面写着
队列持久性持久队列被持久化到磁盘,从而生存代理重新启动。不能持久的队列称为临时队列。并不是所有的场景和用例任务队列都是持久的。 队列的持久性不会使路由到该队列的消息持久。如果代理被删除,然后重新启动,则在代理启动期间将重新声明持久队列,但是,只有持久消息才会被恢复。
然而,当Message崩溃时,我对以下情况感到困惑:-
在所有上述情况下,这些消息在兔子-mq服务器的下一次启动时是否可用?
此外,文档还区分了正常消息和持久消息,因为只有持久消息才会被恢复。这两种消息类型之间有什么区别?
提前谢谢。
发布于 2018-04-11 08:45:45
代理重新启动后,持久队列将保持不变。这意味着在重新启动队列后,将自动重新创建队列,而不需要再次手动创建队列。这只会确保队列将继续存在的,但不会包含任何消息.。
现在,持久性消息将在到达队列后立即写入磁盘,这与队列无关(不管是否持久)。
所以回答你的问题。如果您希望在重新启动后恢复您的消息,请始终声明它们是持久的。如果是这样的话,您的场景将是:
注意到,持久性消息在非持久队列中没有任何影响;当服务器重新启动时,队列将不会被重新创建,因此不会从持久化日志文件中重新创建消息。对于消息可能被路由到的每个非持久队列也是如此:一旦消息被路由到一个非持久队列,它就会从持久化日志文件中被删除,并且不再被认为是持久的。
https://stackoverflow.com/questions/49770044
复制相似问题