摘要:
一个主题有多个分区,只有在一个分区内的消息才有顺序性,我们可以在发送消息时指定对应的分区号或者发送消息时按照相同的业务设置相同的key,通过对应key的hashcode值找到对应的分区,这样就能将消息放入一个分区从而保证消费的顺序性。 阅读全文
摘要:
(1)生产者发送消息采用异步回调发送,如果发送失败,我们可以通过回调获取消息信息,可以选择记录日志或者重试,同时生产者也可以设置消息重试机制。 (2)采用broker的复制机制保证消息在broker中不丢失:开启生产者消息确认机制为all,这样的话,当生产者发送消息到了分区之后, 不仅仅只在lead 阅读全文
摘要:
(1)消费者可以开启多线程消费,提高消费速率。 (2)一个工作队列可以绑定多个消费者,同时消费消息。 (3)扩大队列容积,提高堆积上限。比如集群搭建。 (4)采用RabbitMQ惰性队列: ①接收到消息后直接存入磁盘而非内存。 ②消费者要消费消息时才会从磁盘中读取并加载到内存。 ③支持数百万条的消息 阅读全文
摘要:
延迟队列:延迟队列就是由死信交换机+消息的存活时间(TTL)实现的,如果队列中的消息超时未消费,就会将这个消息投递到死信交换机,死信交换机还可以绑定其它队列,在我们发消 息的时候可以按照需求指定TTL的时间,这样就实现了延迟队列的功能了。 阅读全文
摘要:
产生重复消费的原因:当消费者消费完消息之后还没来的及给消息队列返回ack,此时MQ宕机了,当在次重启时就可能再次消费这条消息,就产生了重复消费。 解决方法:每一个消息都有一个唯一标识,我们可以在消费消息前去数据库中查询一下是否存在这条消息,如果存在说明重复消费了,如果不存在说明没有消费。 阅读全文
摘要:
(1)开启生产者确认机制,保证消息能够到达消息队列,如果报错,可以先记录至日志中,在去修复数据。 (2)开启队列和交换机的持久化功能,保证队列中还没有被消费的消息不丢失。 (3)开启消费者确认机制为auto,由spring管理消费者消费成功时返回ack。还可以设置重试次数(如设置3次),当重试超过次 阅读全文