Java面试之RM消息队列

  1. 消息队列有什么优缺点?RabbitMQ有什么优缺点
    优点:
    解耦:通过消息队列隔离服务,需要消息可以自取,而不用在服务端费力调配
    削峰:降低服务器压力
    异步:通过消息队列实现异步化,大大减少响应时间
    缺点:
    增加了系统复杂度,降低了可用性,出现了数据一致性的问题
  2. 有哪些公司常用的消息中间件
    ActiveMQ:历史比较久,但目前用来处理高并发的使用案例较少,大多用来做一些本地功能
    RocketMQ:阿里开源出来的,经历了比较多的实用案例,而且java语言编写,易于阅读源码改造
    RabbitMQ:国内使用最为广泛,各方面性能十分优秀,社区支持稳定,使用案例丰富
    KafKa:消息中间件的相关功能较少,但在数据,日志方面做得比较好,所以在大数据云计算方面应用广泛
  3. MQ 有哪些常见问题?如何解决这些问题?
    顺序问题:消息可能不按规定顺序到达,解决方法:保证生产者-mq-消费者链条的唯一性
    重复问题:消息会重复到达多条,解决办法:对消息保持幂等性,去重,不论多少条消息,到达都按一条处理
  4. rabbitMq简介,应用场景
    erlang语言开发,基于amqp协议
    应用:
    服务间异步通信(邮箱)
    顺序消费(订单状态)
    请求削峰(高并发)
    定时服务(定时提醒)
  5. RabbitMQ基本概念
    Exchange:交换机,对消息队列加规则路由,发给对应的目标
    Queue:消息载体,以队列为基本概念存放消息
    Binding:绑定,绑定队列到交换机上
    Routing Key:路由键,就是制定投递消息的目标
    Producer:生产者,投递消息的一方
    Consumer:消费者:接收消息方
    Channel:传递消息的一个会话流程
  6. RabbitMQ的工作模式
    simple,简单的模式,消息发到队列里,
    work,竞争,消费者谁先来谁拿队列里的消息
    routing,路由,有多个队列,根据路由信息发到对应队列里,再被匹配消费者拿走
    subscribe:订阅,有多个队列,消息复制多份,每个队列给一份,再被消费者消费
    topic:类似路由模式,但有模糊匹配规则,一份消息会发给多个队列,别的相同
  7. 如何保证RabbitMQ消息的顺序性?
    拆分多个队列,各自有路由规则进行排序,或者在到达消费者之前,设置一个写好的程序,在内存中进行排序后再分发
  8. 消息如何分发
    消息以循环方式分发给消费者,一条消息只能被一个消费者消费,设置路由可实现多消费
  9. 消息如何路由,常用的交换器
    消息有一个路由键,可以将其绑定到对应交换器,再发给对应队列,这其中都是绑定路由进行匹配
    交换器类型:fanout:广播,绑定的队列各发一个
    topic:通过模糊匹配绑定规则,可以一个队列接收多个来源消息
    direct:通过绑定路由,发到对应队列
  10. 消息基于什么传输?
    TCP连接内的虚拟信道,好处是没有数量限制
  11. 如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?
    重复消费的原因:
    消息被消费后,会给消息队列返回信息,于是队列清除这一条,但如果因为不可抗力造成返回错误,那这条信息就没清除,之后被别的消费者拿走了
    解决办法:在消息上做标记,消费者这里有一个消息序列,消费时检查标记,重复的不予接收,不连续的不予接收,实际操作时会比较复杂
  12. 如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
    借鉴计算机网络思想,生产者发到队列的消息,需要返回一个ack确认,没有收到返回一个nack,在等待确认时,生产者可以继续发
    消费者在消费消息后,返回给队列一个id,队列删掉这个id的消息,保证幂等性
  13. 如何保证RabbitMQ消息的可靠传输
    通常有消息丢失和劫持,丢失分为三种
    生产者丢失:通过返回ack和nack的机制,重发或者回滚
    队列丢失:持久化,利用消息durable属性,写到磁盘里,到时回滚
    消费者丢失:一般是收到消息后处理消息前丢失了,但消息队列已经删了这条,可以改自动确认设置为手动确认
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值