![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
09 消息队列
消息队列
喵了个咪的回忆丶
Java后台
展开
-
七、如何解决消息积压
如何避免消息积压?通过优化性能来避免消息积压。对于 RocketMQ 和 Kafka,它们每秒钟可以处理几十万条消息,而一般的业务系统,单个节点可以处理几百到几千次请求,都是非常好的了,所以优化性能时,主要关注的是消息的发送端和接收端。优化发送端的性能。可以通过增加每次发送消息的批量大小,或者增加并发,来优化发送性能。如果是一个注重响应时延的在线业务,如果选择批量发送,会影响时延,所以应该通...原创 2020-04-05 19:51:57 · 556 阅读 · 0 评论 -
六、如何保证消息顺序消费
如何避免消息积压?通过优化性能来避免消息积压。对于 RocketMQ 和 Kafka,它们每秒钟可以处理几十万条消息,而一般的业务系统,单个节点可以处理几百到几千次请求,都是非常好的了,所以优化性能时,主要关注的是消息的发送端和接收端。优化发送端的性能。可以通过增加每次发送消息的批量大小,或者增加并发,来优化发送性能。如果是一个注重响应时延的在线业务,如果选择批量发送,会影响时延,所以应该通...原创 2020-04-04 22:28:23 · 256 阅读 · 0 评论 -
五、 用幂等性解决消息重复问题
如何解决消息重复问题?可以通过让消费消息的操作具备幂等性来解决。幂等指的是多次执行与一次执行产生的影响相同。具体方案:利用数据库的唯一约束实现幂等。因为唯一约束可以保证不重复插入数据,或者通过 Redis 的 setnx 命令来实现数据库的唯一约束,因为 setnx 指的是 insert if not exist,也能防止插入重复数据。为更新的数据设置前置条件。给数据变更设置一个前置条件...原创 2020-04-04 21:42:19 · 641 阅读 · 0 评论 -
四、如何保证消息不丢失(可靠传递)
如何保证消息不丢失(可靠传递)在生产阶段,消息队列通过请求确认机制,来保证消息的可靠传输。也就是 producer 将消息发到 broker 后,broker 会返回一个确认响应,表明收到了消息,如果 producer 收到了这个确认响应,就表示消息在生产阶段没有丢失。在存储阶段,如果 broker 出现故障,比如服务器宕机,就可能丢失消息,解决办法是:对于单个节点的 broker,在收到...原创 2020-04-04 20:27:41 · 469 阅读 · 0 评论 -
三、利用事务消息实现分布式事务
消息队列中的事务解决的是消息生产者和消费者的数据一致性问题。在订单系统中,创建订单的过程执行了两个操作:在订单库中插入一条订单数据,创建订单将订单内容发给消息队列,购物车订阅了相应主题,根据订单内容中的商品来清理购物车。 这两个步骤要么同时成功,要么同时失败,否则就会出现订单数据与购物车数据不一致的情况。可以通过分布式事务来解决:首先订单系统在消息队列上开启一个事务然后订单系...原创 2020-04-04 20:26:38 · 189 阅读 · 0 评论 -
二、两种消息模型,RocketMQ(Kafka)的消息模型
两种消息模型一、队列模型(消息数据不能被多次消费)(RabbitMQ) 一份消息数据只能被消费一次,如果想要被多次消费,需要为每一个消费者都创建一个队列,然后将消息数据复制到这多个队列中。这样做比较浪费资源。 二、发布-订阅模型 (消息数据能被多次消费) (RocketMQ/Kafka) 消息的发送方称为发布者,消息的接收方称为订阅者,存放消息的容器称为主题。...原创 2020-04-04 20:19:30 · 1000 阅读 · 0 评论 -
一、消息队列的作用和选型
消息队列的作用异步处理:用户秒杀成功后可以立刻给用户返回响应,然后把请求的数据放入消息队列中,由消息队列异步地进行后续生成订单、短信通知等操作。流量控制(削峰):秒杀开始后,当短时间内大量的秒杀请求到达网关时,不会直接冲击到后端的秒杀服务,而是先堆积在消息队列中,后端服务按照自己的最大处理能力,从消息队列中处理请求。比如采用令牌桶的方式实现:单位时间内只发放固定数量的令牌到令牌桶中,服务在处...原创 2020-04-04 20:15:24 · 196 阅读 · 0 评论