![](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 · 744 阅读 · 2 评论 -
消息队列--可靠性(高可用)
这边以RabbitMQ与Kafka为例: 1、RabbitMQ的可靠性(不丢失) 发送方确认模式 生产者将数据放到消息队列中,消息队列有数据了,主动叫消费者去拿(俗称push) 将信道设置成 confirm 模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的 ID。 一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认ack给生产者(包含消息唯一 ID)。 如果 RabbitMQ 发生内部错误从而导致消息丢失,会发送一条 nack(notac原创 2021-01-03 19:18:21 · 592 阅读 · 0 评论 -
消息队列-选型
消息队列如何选择 消息队列的选择,一般从以下几个方面进行考虑: (1)吞吐量 (2)时效性 (3)可用性 (4)可靠性 综上所述: 最早一般都使用ACviceMQ,但是现在很少使用,不推荐。 RabbitMQ的底层语言是erlang语言,一般不会单独为了其去学习一门语言,但是RabbitMQ目前开源稳定,活跃度也表较高,一般很多公司都在使用它。 RocketMQ是阿里开源的一套消息中间件,底层使用Java进行开发,也很活跃,一般可以放心用。天猫双11一般都是使用它进行实现的。 Kafka一般专注于实时计原创 2021-01-03 19:14:23 · 296 阅读 · 0 评论 -
消息队列-优缺点
优点: (1)解耦 传统模式的缺点:系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦!(若多个应用使用A系统的东西,但是根据业务的需求,可能进行更改,那么就需要频繁的修改代码) 中间件模式:将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。(A只需要把东西放在消息队列中,谁要用不关乎它的事情) (2)异步 传统模式缺点:一些非必要的业务逻辑以同步的方式运行,太耗时间。(一个业务涉及了多个操作,有些事原创 2021-01-03 19:07:31 · 424 阅读 · 1 评论