MQ
文章平均质量分 87
木易三水良
这个作者很懒,什么都没留下…
展开
-
分布式事务
消息队列中的事务主要解决的是消息生产者和消息消费者的数据一致性问题2PC(Two-phase Commit,也叫二阶段提交)TCC(Try-Confirm-Cancel)事务消息RocketMQRocketMQ 事务消息的实现原理基于两阶段提交和定时事务状态回查来决定消息最终是提交还是回滚,RocketMQ 先执行第一部分的事务,如果失败则回滚,如果成功则定时任务会去回查到事务执行成功,这个时候通知消费者执行第二阶段的事务,如果失败则不断重发消息给消费者消费,如果成功则整个流程走完,保证了事务原创 2021-06-29 11:13:08 · 106 阅读 · 0 评论 -
消息的积压
消息积压其实对于一个原本正常的消息系统来说消息积压,只会出现两种情况:要么生产者消息数量增加导致的积压;要么就是消费者消费变慢导致的消息积压。对于一个消息队列我们肯定在上线前就预估好,单节点最大承受流量与系统目前最大峰值流量的数据,一般情况下消息队列收发性能是远大于业务处理性能的,一旦出现的话问题也很显而易见:要么就是流量突然增加,要么就是业务逻辑异常。生产端一般当生产端发生积压(Broker正常的情况下)就要查看你的业务逻辑是否有异常的耗时步骤导致的。是否需要改并行化操作等。Br原创 2021-06-28 16:43:37 · 225 阅读 · 0 评论 -
消息顺序消费
顺序消息的场景可能用的比较少,但是还是有的 比如一个电商的下单操作,下单后先减库存然后生成订单,这个操作就需要顺序执行的 那怎么保证顺序呢?首先生产者需要保证入队的顺序,入队都是乱的那再厉害的MQ也招架不住啊一般的MQ都能保证内部Queue是FIFO的(先进先出),但是只是针对一个Queue,所以在发送消息的时候可以使用Hash取模法将同一个操作的消息发送到同一个Queue里面,这样就能保证出队时是顺序的了。消费者也需要注意,如果多个消费者同时消费一个队列。一样可能出现顺序错乱的情况。这就相当于是原创 2021-06-28 16:15:04 · 592 阅读 · 0 评论 -
消息丢失(可靠性传输)
RabbitMQ生产者发送消息阶段丢失// 开启事务channel.txSelecttry { // 这里发送消息} catch (Exception e) { channel.txRollback // 这里再次重发这条消息}// 提交事务channel.txCommittransaction机制,然而缺点就是吞吐量下降了。因此,生产上用confirm模式的居多。一旦channel进入confirm模式,所有在该信道上面发布的消息都将会被指派一个唯一的ID原创 2021-06-28 15:24:08 · 253 阅读 · 1 评论 -
消息重复消费
1、产生重复消费的原因无论是那种消息队列,造成重复消费原因其实都是类似的。正常情况下,消费者在消费消息时候,消费完毕后,会发送一个确认信息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除。只是不同的消息队列发送的确认信息形式不同,例如RabbitMQ是发送一个ACK确认消息,RocketMQ是返回一个CONSUME_SUCCESS成功标志,kafka offset的概念,kafka offset概念:就是每个消息写进去,都有一个offset,代表他的序号,然后consumer消费原创 2021-06-28 14:12:52 · 1786 阅读 · 0 评论