消息队列(MQ)核心知识点(持续更新中)

RabbitMQ

RabbitMQ概念及架构

参考文章,RabbitMQ详解:https://blog.youkuaiyun.com/qq_36763419/article/details/122023216

在这里插入图片描述

RabbitMQ消息丢失的场景及解决方案

场景1:生产者(Producer)将消息投递到 Broker 时,因为网络波动导致消息不能正常投递到Broker?
解决方案:针对生产者可以开启(Confirm)消息发布确认机制

场景2:交换机(Exchange)将消息转发到队列(Queue)时,Broker服务出现宕机?
解决方案:对RabbitMQ进行消息持久化(注意事项:消息持久化影响性能)。如下:

  1. Exchange持久化
  2. Queue持久化
  3. 消息持久化

场景3:消费者消费队列中的消息时,消费者拿到消息开始消费后,出现消费异常或者消费者宕机,默认情况下自动确认会导致消息丢失?
解决方案:开启手动ACK,由消费者手动确认消费。

RabbitMQ重复消费场景及解决方案

场景1:生产者推送多个一样的消息。如,接口调用时重复提交,没有做好接口幂等性?
解决方案:设置接口幂等性,防止接口重复提交

场景2:消费者完成消费后,准备发送ACK确认消费时,RabbitMQ出现宕机,导致MQ没有及时将消息出队,服务重启后,会再次推送该消息,导致重复消费?
场景3:消费者完成消费后,来不及发送ACK确认消费,消费者出现宕机,服务重启后,会再次收到队列中的消息进行消费。
场景 2、3 解决方案:设置消息幂等性处理(如:Redis为例,基于Redis实现锁续命)

@Service
@Slf4j
@SuppressWarnings(value = {
   "unchecked", "rawtypes"})
public class RabbitMQConsumerService {
   

    @Autowired
    private RedisTemplate redisTemplate;


    /*消费端监听队列(普通队列)*/
    @RabbitListener(queues = {
   "test.queue"})
    public void receiveMsg(JSONObject msgJson, Message message, Channel channel) throws IOException {
   

        long deliveryTag = message.getMessageProperties().getDeliveryTag(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌守

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值