Rabbitmq面试题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


rabbitmq的组成

1、消费者
2、信道channel:信息传递时使用的通道
3、交换机:消息中转站,将生产者端发送的消息路由至一个或多个队列。
每个消息都有一个路由键
(1)直接交换机:消息根据路由键发送至与之完全匹配的队列中。
(2)主题交换机:主题是指以点号分隔开的几个单词,例如"quick.orange.rabbit"。利用*、#匹配规则,根据消息的路由键将消息传送到主题匹配的队列中,可以实现一个消息传送到多个队列的场景。
(3)扇出交换机:将接收到的消息发送到交换机知道的所有队列中。
(4)头部交换机;按照消息中的头信息进行队列的匹配,头消息由一些描述信息的键值对组成。这里交换机与队列也是通过一些匹配规则绑定的。
4、队列
5、消费者

一、RabbitMq如何保证数据不被重复消费?

1、如果业务是在数据库中插入一条数据,为每一条记录生成一个全局id,将这个id作为数据库表的主键,则可以利用数据库的唯一主键性质保证。
2、或者可以引入一个redis,因为redis的set操作具有幂等性,为每一条消息生成全局id,当这条消息被消费后用set放入redis中。每次操作时,先查看redis是否存在,存在则说明已经被消费;若不存在,则进行后续逻辑操作,完成后放入redis中。

二、RabbitMq如何保证消息的顺序消费?

1、多个生产者一个消费者
采取为消息编号的方式,消费者收到一条消息时首先判断前一个编号对应的消息是否已经存入redis中了,如果有,则对信息进行消费,利用一个redis存储消息。
2、多个消费者
在rabbitmq中创建多个队列,按照业务制定规则,根据消息中的特定属性将消息分发至不同队列中,每个队列一个消费者保证数据消费的一致性。(例如将同一订单号的操作请求输入至一个队列中)

三、Rabbitmq出现消息积压怎末办

1、检查消费者是否出现异常
2、增加消费者的多线程处理
3、死信队列(当消息在队列中无法正常被消费者处理时,就会被重新投递到一个死信交换机上,死信交换机上绑定了一个队列,如果死信队列被相应消费者监听时,处理就会像处理正常业务一样)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值