当前位置:   article > 正文

【参考】RabbitMQ使用总结:持久化_mq的持久化

mq的持久化
  • 持久化

     RabbitMQ的持久化是为了实现服务从异常状态恢复后恢复之前的状态。RabbitMQ发送消息涉及交换器(exchange)、队列(queue)、消息,因而持久化包括交换器的持久化、队列的持久化、消息文本的持久化。获取消息是从队列中获取的、交换器进行的转发,所以为了确保消息的最终持久化,一般交换器、队列、消息都要进行持久化。 

     刚开始做练习的时候,一直有两个疑问没想通? 
     1、工作队列练习中只有一个consumer可以接收到消息,交换器类型的练习可以多个consumer接收到消息。一直在想为什么? 
     对比其差异才发现,工作队列练习多个consumer声明在同一个queue上,而转发器是把消息转发给相匹配的queue上,各自queue上声明的consumer可以从上获取到消息 

     2、转发器练习先启动消息发送类,再启动消息接收类,无法接收消息。为什么工作队列的练习可以? 
     转发器是把消息转发给队列,consumer从队列上获取消息。转发器练习中消息发送类中不需要先声明一个队列,先启动发送消息类,这时候没有接收队列,所以消息实际上未发出去。所以consumer只能接收所在队列声明后的消息。 
     针对上述情况,消息发送时相匹配的队列未创建,消息丢失的情况,可以在发送消息时设置mandatory=true,同时声明ReturnListener监听器,接收未发送出去的消息,避免blackholed现象。所以为了保证消息的可靠投递需要使用mandatory(true)、Publisher confirm(手动应答模式)、持久化三者结合的方式。补充:再加上消息的确认机制可确保消息成功发布到broker 
     在搭建用户消息时,可以创建临时队列绑定在fanout上接收广播信息(不接收非在线的消息),创建一个持久化私有队列(消息上线即可见),用于接收用户个人信息 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/689996
推荐阅读
相关标签
  

闽ICP备14008679号