消息队列MQ

什么是MQ?
MQ,是Message Queue(消息队列)的简称,是在消息的传输过程中保存消息的容器。多用于分布式系统通信之间进行通信。
为什么使用MQ(优缺点)?
优点:
①应用解耦:提高系统的容错率性和可维护性
②异步提速:提升用户体验和系统吞吐量
③削峰填谷:提高系统的稳定性
缺点:
①系统的可用性降低
②系统引入的外部依赖越多,系统的稳定性越差。
③系统的复杂度提高
④MQ的加入大大增加了系统的复杂度,以前都是系统间的同步远程调用,现在是通过MQ进行异步调用
⑤一致性问题
常见的MQ?

常见的MQ

对于MQ常见问题的解决?
1,如何保证MQ的高可用?
使用集群的方式维持MQ的可高用性。
2,如何保证消息不被重复消费?
保证消息不被重复消费的关键就是保证消息队列的幂等性
①拿到的这个消息,做数据库的insert操作,给消息设置一个唯一主键,那么就算出现重复消费的情况,主键也会冲突,就可以避免数据库出现脏数据啦
②拿到的这个消息,做数据库的set操作,无论set多少次,都还是做幂等操作
③准备个第三方介质做消费记录,只要消费就去查消费记录。以redis为例,给消息设置一个全局id,只要消费过该消息,就会以key-value的形式存入redis,那样的话,消费者消费前就会先去redistribution中查询有没有消费记录。
3,如何解决丢数据问题?
①生产者丢数据
	以RabbitMQ为例,提供了transaction和confirm模式来确保生产者不丢消息。
②消息队列数据
	处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。这个持久化配置可以和confirm机制配合使用,可以在消息持久化磁盘后,再给生产者发送一个Ack信号。这样的话,如果消息持久化磁盘之前,RabbitMQ阵亡的话,生产者收不到Ack信号,生产者就会自动重发。
③消费者丢数据
	启用手动确认模式可以解决这个问题
4,如何保证传递消息的顺序性?
以RabbitMQ为例,
		场景:一个queue,多个consumer
		解决:拆分多个queue,每个queue对应一个consumer或者是就一个queue,但是对应的一个consumer,在这个consumer内部使用内存队列做排队,然后再分发给底层不同的worker来处理。

创作不易,记得一键三连么么哒~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值