mq相关复习

RabbitMQ 如何保证消息不丢失 ?
解决方案,RabbitMQ中一共有三种身份一种是生产者,一种是消费者,还有一种就是rabbitMQ本身也是一种代理,为了避免RabbitMQ消息不被丢失,我们可以在生产者中开启RabbitMQ事务同步(不推荐)或者开启confimmoshi,mq当中我们可以开启rabbit持久化,消费者中我们关闭rabbitMQ自动ACK

如何保证消息的幂等性
所谓的幂等性其实就是保证同一条消息不会重复或者重复消费了也不会对系统数据造成异常。设置唯一的id

RabbitMQ保证消息顺序性总结
核心思路就是根据业务数据关键值划分成多个消息集合,而且每个消息集合中的消息数据都是有序的,每个消息集合有自己独立的一个consumer。多个消息集合的存在保证了消息消费的效率,每个有序的消息集合对应单个的consumer也保证了消息消费时的有序性。

将原来的一个queue拆分成多个queue,每个queue都有一个自己的consumer

出现消息重复消费的情况

拿RabbitMQ来说的话,消费者在消费完成一条消息之后会向MQ回复一个ACK(可以配置自动ACK或者手动ACK) 来告诉MQ这条消息已经消费了。假如当消费者消费完数据后,准备回执ACK时,系统挂掉了,MQ是不知道该条消息已经被消费了。所以重启之后MQ会再次发送该条消息,导致消息被重复消费,如果此时没有做幂等性处理,可能就会导致数据错误等问题。

为什么使用mq?

异步处理,

应用解耦:系统之间通过消息通信,,不用关心其他系统的处理

流量削峰,日志处理,消息通讯

RabbitMQ优点?

如果消息队列不是将要构建系统的重点,对消息队列功能和性能没有很高的要求,只需要一个快速上手易维护的mq,建议使用Rabbitmq,

Rabbitmq有一些机制可以保证可靠性,而且有灵活的路由和拓展性,同时也支持很多第三方插件和高可用,管理界面等

RabbitMQ有哪些基本的概念?

Broker:消息队列实体

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列

Queueu:消息队列载体,每个消息都会被投入到一个或多个队列

Binding:绑定,它的作用就是将exchange和queue按照路由规则绑定起来

Routing Key:路由关键字,exchange根据这个关键字进行消息投递

Producer:消息生产者,就是投递消息的程序  一般分为消息体(payload)和标签(label)

Consumer消息消费者,就是接受消息的程序,链接到mq服务器,订阅到队列上,消费时候只消费消息体不消费标签

Channel:消息通道,在客户端的每个链接里,可建立多个channel,每个channel代表一个会话任务

RabbitMQ的工作模式有哪几种?

1、收发模式:消息生产者将消息放入队列,消费者监听消费队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除

2、工作模式(竞争模式):生产者将消息放入队列,消费者可能有多个,同时监听一个队列谁先拿到谁负责消费(高并发模式可能会产生被同时消费,可以设置一个开关保证只能被一个消费)

3、发布订阅模式:每个消费者监听自己的队列,生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接受到消息

4、路由模式:

5、主题模式(topic):模糊匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值