
MQ
蛋焊工
搬砖小学生
展开
-
RocketMQ实现延时队列原理
说明:rocketmq实现的延时队列只支持特定的延时时间段,1s,5s,10s,...2h,不能支持任意时间段的延时。具体实现:rocketmq发送延时消息时先把消息按照延迟时间段发送到指定的队列中(rocketmq把每种延迟时间段的消息都存放到同一个队列中)然后通过一个Timer定时器进行轮训这些队列,查看消息是否到期,如果到期就把这个消息发送到指定topic的队列中,这样的好处是同一队列中的消息延时时间是一致的,还有一个好处是这个队列中的消息时按照消息到期时间进行递增排序的,说的简单直白就是队列中消原创 2021-08-13 10:41:38 · 5437 阅读 · 1 评论 -
消费mq数据时问题
1、如果存在先查后插的情景时,一定要加分布式锁,一定要加分布式锁,一定要加分布式锁。重要事情说三遍。原创 2019-12-09 20:11:41 · 376 阅读 · 0 评论 -
RabbitMq重试次数和幂等性
当消费者配出异常,也就是说当消息消费不成功的话,该消息会存放在rabbitmq的服务端,一直进行重试,直到不抛出异常为止。如果一直抛异常,我们的服务很容易挂掉,那有没有办法控制重试几次不成功就不再重试了呢?答案是有的。我们在消费者application.yml中增加一段配置。spring: rabbitmq: # 连接地址 host: 127.0.0.1 # ...原创 2020-01-22 17:31:33 · 5273 阅读 · 10 评论 -
RabbitMQ之如何保障数据不丢失
1、费者实例宕机的时候,如何保障数据是不会丢失?手动ack机制非常的简单,必须要消费者确保自己处理完毕了一个消息,才能手动发送ack给MQ,MQ收到ack之后才会删除这个消息,如果消费者还没发送ack,消费者自己就宕机了,此时MQ感知到它的宕机,就会重新投递这条消息给其他的消费者实例。通过这种机制保证消费者实例宕机的时候,数据是不会丢失的。如果采用手动ack机制,实际上消费者服务每次消费了...原创 2019-01-15 14:30:33 · 5717 阅读 · 3 评论 -
RabbitMQ之Exchange交换机
在AMQP模型中,Exchange是接受生产者消息并将消息路由到消息队列的关键组件。RabbitMQ提供了四种Exchange:fanout(广播),direct(相等,系统默认交换机),topic(匹配),headers。但常用的主要是fanout,direct,topic。性能排序:fanout > direct >> topic。比例大约为11:10:6。E...原创 2019-01-21 15:12:47 · 242 阅读 · 2 评论