Java面试题精选:消息队列(三)

1、RabbitMQ中的vhost起什么作用?

(1)vhost本质上就是一个mini版的mq服务器(虚拟消息服务器)。
有自己的队列、交换器和绑定,最重要的,拥有独立的权限机制,可以做到vhost范围的用户控制。
(2)Vhost提供了逻辑上的分离,可以将众多客户端进行区分,又可以避免队列和交换器的命名冲突。
(3)Vhost必须在连接时指定,rabbitmq包含缺省vhost:“/”,通过缺省用户和口令guest进行访问。
(4)rabbitmq里创建用户,必须要被指派给至少一个vhost,并且只能访问被指派内的队列、交换器和绑定。
(5)Vhost必须通过rabbitmq的管理控制工具创建。在这里插入图片描述

2、RabbitMQ上的一个queue中存放的message是否有数量限制?限制是多少

默认情况下一般是无限制,因为限制取决于机器的内存,但是消息过多会导致处理效率的下降。
可以通过参数来限制:

  • x-max-length :对队列中消息的条数进行限制 ,
  • x-max-length-bytes :对队列中消息的总量进行限制

3、说一说RabbitMQ中的AMQP

AMQP 协议即高级消息队列协议
RabbitMQ就是 AMQP 协议的 Erlang 的实现(当然 RabbitMQ 还支持 STOMP2、 MQTT3 等协议)。
AMQP 的模型架构和 RabbitMQ 的模型架构是一样的,生产者将消息发送给交换器,交换器和队列绑定 。
RabbitMQ 中的交换器、交换器类型、队列、绑定、路由键等都是遵循的 AMQP 协议中相 应的概念。
在这里插入图片描述

4、RabbitMQ开启持久化机制,有什么要注意的点?

(1)开启持久化后,效率会变低;
(2)开启持久化需要交换器、队列、消息三者都需要持久化;
队列(队列本身【名称、源数据】、队列消息)、交换器、绑定关系都需要开启持久化
在这里插入图片描述

5、RabbitMQ中交换器4种类型?

(1)Fanout(广播): 把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
在这里插入图片描述
(2)Direct(直接交换器):把消息路由到BindingKey和RoutingKey完全匹配的队列中。
在这里插入图片描述
(3)Topic(主题):
匹配规则

  • RoutingKey 为一个点号’.'分隔的字符串。比如: java.xiaoka.show
  • BindingKey和RoutingKey一样也是点号“.“分隔的字符串。
  • BindingKey可使用 * 和 # 用于做模糊匹配,*匹配一个单词,#匹配多个或者0个
    在这里插入图片描述
    (4)headers:忽略routing_key的一种路由方式,不处理路由键,是根据发送消息内容中的headers属性进行匹配。性能差,基本用不到。(几乎与Direct差不多,不实用,一般会忽略,基本被Direct取代)

6、Rocketmq如何保证高可用性?

  1. 架构层面
    避免用单节点或者简单的一主一从架构,可以采取多主从的架构,并且主从之间采用同步复制的方式进行数据双写。
  2. 刷盘策略
    RocketMQ默认的异步刷盘,可以改成同步刷盘SYNC_FLUSH。
  3. 生产消息的高可用
    当消息发送失败了,在消息重试的时候,会尽量规避上一次发送的 Broker,选择还没推送过该消息的Broker,以增大消息发送的成功率。
  4. 消费消息的高可用
    消费者获取到消息之后,可以等到整个业务处理完成,再进行CONSUME_SUCCESS状态确认,如果业务处理过程中发生了异常那么就会触发broker的重试机制。

7、RocketMq的存储机制了解吗?

  消息生产者发送消息到broker,都是会按照顺序存储在CommitLog文件中,每个commitLog文件的大小为1G
在这里插入图片描述

CommitLog-存储所有的消息元数据,包括Topic、QueueId以及message
CosumerQueue-消费逻辑队列:存储消息在CommitLog的offset
IndexFile-索引文件:存储消息的key和时间戳等信息,使得RocketMq可以采用key和时间区间来查询消息
也就是说,rocketMq将消息均存储在CommitLog中,并分别提供了CosumerQueue和IndexFile两个索引,来快速检索消息

8、RocketMq性能比较高的原因?

  1. 顺序写
    顺序写比随机写的性能会高很多,不会有大量寻址的过程
  2. 异步刷盘
    相比较于同步刷盘,异步刷盘的性能会高很多
  3. 零拷贝
    使用mmap的方式进行零拷贝,提高了数据传输的效率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值