![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
消息队列
文章平均质量分 56
pan_mlpan
没有伞的孩子要努力奔跑
展开
-
消息队列--重复消费问题
消息重复消费用幂等性解决消息重复 所谓幂等性,就是数据无论操作多少次,所产生的影响跟执行一次是一样的,比如对于读操作来说,无论读取多少次数据,都跟读取一次的数据是一样的,所以读操作是一个幂等性操作,而添加操作,添加多次会有多条记录,因而写操作则是非幂等性操作。因而对于以上场景,只要保证消息消费的幂等性,就能解决重复消费的问题。常见的几种设计幂等的方法:利用数据库唯一约束实现幂等可以通过给消息的某一些属性设置唯一约束,比如增加唯一uuid,添加的时候查询是否存对应的uuid,存在不操作,不存在则添转载 2021-01-03 19:20:05 · 747 阅读 · 2 评论 -
消息队列--可靠性(高可用)
这边以RabbitMQ与Kafka为例:1、RabbitMQ的可靠性(不丢失)发送方确认模式生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push) 将信道设置成 confirm 模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的 ID。 一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认ack给生产者(包含消息唯一 ID)。 如果 RabbitMQ 发生内部错误从而导致消息丢失,会发送一条 nack(notac原创 2021-01-03 19:18:21 · 603 阅读 · 0 评论 -
消息队列-选型
消息队列如何选择消息队列的选择,一般从以下几个方面进行考虑:(1)吞吐量(2)时效性(3)可用性(4)可靠性综上所述:最早一般都使用ACviceMQ,但是现在很少使用,不推荐。RabbitMQ的底层语言是erlang语言,一般不会单独为了其去学习一门语言,但是RabbitMQ目前开源稳定,活跃度也表较高,一般很多公司都在使用它。RocketMQ是阿里开源的一套消息中间件,底层使用Java进行开发,也很活跃,一般可以放心用。天猫双11一般都是使用它进行实现的。Kafka一般专注于实时计原创 2021-01-03 19:14:23 · 299 阅读 · 0 评论 -
消息队列-优缺点
优点:(1)解耦传统模式的缺点:系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!(若多个应用使用A系统的东西,但是根据业务的需求,可能进行更改,那么就需要频繁的修改代码)中间件模式:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。(A只需要把东西放在消息队列中,谁要用不关乎它的事情)(2)异步传统模式缺点:一些非必要的业务逻辑以同步的方式运行,太耗时间。(一个业务涉及了多个操作,有些事原创 2021-01-03 19:07:31 · 430 阅读 · 1 评论