2023年Java面试题-RabbitMQ

系列文章目录

2023年Java面试题



RabbitMQ


一、RabbitMQ 有哪些重要的角色?

生产者和消费者
生产者是消息的投递方,负责推送消息
消费者是消息的接收方,负责处理消息

二、RabbitMQ 有哪些重要的组件?

ConnectionFactory(连接管理器):就是应用程序与RabbitMQ之间建立连接的管理器。
Channel(信道):就是推送消息使用的通道。
Exchange(交换机):用来接收消息和分配消息。
Queue(队列):用来存储生产者的消息。
RoutingKey(路由键):用来把生产者的消息分配到交换机上。
BindingKey(绑定键):用来把交换机的消息绑定到队列上。

三、RabbitMQ的工作模式

RabbitMQ的工作模式有5种
	简单模式
		一个生产者对应一个消费者
	工作模式
		一个生产者对应多个消费者,但是一条消息只能有一个消费者去消费
	订阅模式
		生产者把消息发送到交换机上,交换机绑定到多个队列,然后被监听队列的消费者接收并消费。
	路由模式
		生产者把消息发送到交换机上,在绑定队列和交换机的时候有一个路由key,生产者发送的消息会指定一个路由key,
		然后消息就只会发送到与路由key相同的队列,然后被监听队列的消费者接收并消费。
	主题模式
		主题模式其实就是在路由模式的基础上,加了一个通配符机制,简单来说就是路由key能够使用*号或者#号进行模糊匹配。*号可以代表一个符号,#号可以代表任意个符号。

四、RabbitMQ交换机四种类型

Direct(直连交换机)
	它会把消息分配给路由key和绑定Key完全匹配的队列。
Fanout(扇形交换机)
	它会把消息分配给所有与交换机绑定的队列。不需要指定路由key和绑定KeyTopic(主题交换机)
	它会把消息分配给路由key和绑定Key匹配的队列,但它不是完全匹配,而是可以模糊匹配。
Headers(头部交换机)
	它不依赖于路由key的匹配规则来分配消息,而是根据消息内容中的headers属性进行匹配。
	匹配规则(x-match)有2种all和any,all表示所有的键值对都全完匹配才能接收到消息,any表示只要有键值对匹配就能接收到消息。

五、怎么保证消息的可靠性/不丢失?

消息丢失的原因?
	生产者、消费者、消息队列都有可能丢失消息
	生产者丢失消息是因为没有把消息成功发送到消息队列
	消费者丢失消息是因为没消费完就出现了异常
	消息队列丢失消息可能是因为宕机导致内存中的消息丢失
如何保证消息的可靠性/不丢失?
	1、开启生产者确认模式
	2、开启消费者确认模式
	3、消息队列和消息都开启持久化

六、如何保证消息不被重复消费/幂等性?

幂等性(每个消息都用一个唯一标识来区分,消费前先判断标识有没有被消费过,如果没有就正常消费,如果有就不消费)

七、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?

开启生产者确认模式,这样所有在信道上发布的消息都会被指派一个唯一的ID。
一旦消息被投递到队列或者被写入磁盘后(可持久化的消息),就会发送一个确认给生产者(包含消息唯一ID)。
开启消费者确认模式,这样消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,RabbitMQ才能安全地把消息从队列中删除。

八、什么是死信队列?

死信队列可以实现消息在没被正常消费的情况下,能对这些消息进行其他处理,保证消息不会被丢弃。
消息变成死信有几种情况
	要么是消息被拒绝(basic.reject / basic.nack),并且requeue = false(重新队列 = false)
	要么是消息过期(因为队列设置了TTLTime To Live)时间)
	要么是消息队列已经满了

九、RabbitMQ 怎么实现延迟消息队列?

RabbitMQ本身是不支持延迟队列的,但是结合死信队列的特性,通过消息过期后进入死信列队,再由死信交换机转发到延迟消费队列,就可以实现延迟功能。

十、RabbitMQ 集群有什么用?

可以实现高可用和高容量
高可用:就是假如某个服务器出现问题,整个 RabbitMQ 还可以继续使用
高容量:就是集群可以承载更多的消息量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值