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

  • 持久化

     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上接收广播信息(不接收非在线的消息),创建一个持久化私有队列(消息上线即可见),用于接收用户个人信息 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值