MQ笔记整理

  1. mq产品使用的一些场景?
  1. 解耦
  2. 消峰
  1. 谈一下消息队列的基本模型?
  1. 生产者——MQ服务器——消费者

  1. 基于队列queue
  2. 基于主题topic
  1. 什么是ACK机制?

就是一种应答机制,告诉mq服务器,消费者消费了该消息,可以从mq列表中删除该消息了。

  1. 描述一下ACK机制的作用?

上述。

  1. 如果使用了事务,请问ACK机制将是什么?

如果使用事务了:

0——开启事务时的ack策略,并且如果开启了事务,会强制使用0,该情况下执行了session.commit()的时候才能发送ack消息给服务器,服务器才会将该消息从列表中删除。

如果没有使用事务:

1)1——自动 consumer.receive()或者consumer.receive(1000)或者onMessage(),如果下面的代码有异常,则会导致数据丢失。

2)2——手动 message.acknowledge();切记该代码要放到业务逻辑的后面。

  1. 谈谈消息的同步消费?
  1. 接收消息的方法需要阻塞——consumer.receive()或者receive(1000)
  2. 如果是自动ACK,那么在receive()方法执行的时候就发送了ACK
  1. 谈谈消息的异步消费?

即有消息的时候,就消费消息,没有消息的时候就不会一直阻塞。异步消费的话,如果消息列表中有消息,它就消费,不用像同步消费那样while(true){

Receive();

}

  1. 简述这几个方法的异同?consumer.receive()和consumer.receive(10000)以及onMessage(message)
  1. 这3个方法都是用来消费消息的,前2个是同步消费,后1个是异步消费
  2. 前2个方法不会重试,后1个方法会重试,共重试6次,如果6次都没有正常执行,则该消息会进入死信队列。死信队列的信息,可以找回来来。——从这个角度来讲,异步接收比同步接收要安全一些。
  3. 异步接收消息,并且手动ACK的模式是最最安全的。

 

  1. 异步接收和同步接收相比,哪个更安全?

异步安全,因为:

  1. 异步的情况,如果有异常,会重试onMessage()方法,并且默认重试6次,期间总有成功的时候
  2. 即使都不成功,消息也不会被ack掉,而是进入死信队列。
  1. 手动ACK和自动ACK,哪个更安全?

手动更安全,因为:

在业务处理完毕后,如果没有异常,再ack消息,保证消息正常消费。

  1. 消息已经消费了,但pending列表中仍然能看到该消息,为什么?
  • 如果使用了事务,可能是没有执行session.commit()方法。
  • 如果没有使用事务:
  1. 如果是自动ACK, receive()执行有误。
  2. 如果是手动ack,可能没有执行message.acknoleage()方法

12.什么时候会进入死信队列?

1)异步接收的情况,默认重试6次后进入死信队列

2)发送消息时,指定了最大消费时间,如果在规定的时间内没有消费掉,也会计入死信队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值