MQ四个问题

为什么要使用MQ?

异步、解耦、削峰填谷

使用了MQ之后有什么优缺点?

缺点:系统可用性降低、系统复杂度提高、数据一致性问题

怎么保证MQ消息不丢失?

生产者数据丢失:
  1、事务方式:通过channel.txSelect开启一个事务,接着发送消息,如果消息没有成功被RabbitMQ接收到,生产者会收到异常,此时就可以进行事务回滚channel.txRollback然后重新发送。假如RabbitMQ收到了这个消息,就可以提交事务channel.txCommit
  2、confirm机制:在生产者设置,每次写消息的时候会分配一个唯一的id,然后RabbitMQ收到之后会回传一个ack,告诉生产者这个消息ok了。
  一般都是使用confirm机制。
Rabbitmq数据丢失:
  在消息发送到RabbitMQ之后,默认是没有落地磁盘的,万一RabbitMQ宕机了,这个时候消息就丢失了。RabbitMQ提供了一个持久化的机制,消息写入之后会持久化到磁盘,哪怕是宕机了,恢复之后也会自动恢复之前存储的数据,这样的机制可以确保消息不会丢失。
  步骤:
  1、创建queue的时候将其设置为持久化的,这样就可以保证rabbitmq持久化queue的元数据,但是不会持久化queue里的数据;
  2、发送消息的时候将消息的deliveryMode设置为2,就是将消息设置为持久化的,此时rabbitmq就会将消息持久化到磁盘上去。
消费端数据丢失:
  RabbitMQ消费消息的机制:在消费者收到消息的时候,会发送一个ack给RabbitMQ,告诉RabbitMQ这条消息被消费到了,这样RabbitMQ就会把消息删除。默认情况下这个发送ack的操作是自动提交的,所以解决方案就是:关闭RabbitMQ消费者的自动提交ack,在消费者处理完这条消息之后再手动提交ack。

怎么保证MQ的高可用性?

rabbitmq有三种模式:单机模式,普通集群模式,镜像集群模式(ok)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值