rabbitMQ重点篇

2019-02-19  本文已影响0人  靈08_1024
  1. 各种MQ的比较
- 服务性能 数据存储 集群架构 API和社区
ActiveMQ 中等吞吐量 KahaDB、MySQL等等 Master-Slave模式
network模式
丰富
Kafaka 高吞吐量
没有事务
对消息丢失、重复消费、消息错误都没有要求
内存 ZK模式 -
rocketMQ 高吞吐量
高性能
有事务,消息可靠
- 可多主多从 半开源
rabbitMQ 高吞吐量
数据可靠,安全
稳定性好
磁盘或内存 HA+镜像队列等多种 开源
  1. rabbitMQ的优点?
    答:跨平台跨语言,开源,可靠性投递,返回模式,与spring的整合很好,集群模式丰富。

  2. rabbitMQ的高能是如何做到的?
    答:其底层的Erlang语言有着和原生socket一样好的延迟。

  3. 什么是AMQP?
    答:Advanced Message Queuing Protocol,高级消息队列协议。
    是具有现代特征的二进制协议。是应用层协议的一个开放标准,为面向消息的中间件设计。

  4. AMQP的核心是什么?

  1. rabbitMQ的整体架构是什么样的?


    image.png
  2. rabbitMQ的交换exchange类型有哪些?

  1. rabbitMQ的持久化是怎么做的?
    答:其exchange、queue都有一个字段(durability)为true则表示要持久化。表示在重启之后,exchange和queue会重新建立。
    而delivery_mode才是真正的消息数据持久化到磁盘,为2表示持久化,为1表示非持久化。

  2. 消息如何做到100%投递?
    答: 1)消息落库,对消息进行打标(改变状态);(broker应答之后);
    2)消息的延迟投递,做二次检查,回调检查。

  3. 消息的幂等性投递。
    答:幂等性,就是同一条消息无论经过多少次投递,所得结果都是一样的。

  4. 重复消费消息。
    答:对于指定消息的业务关键字ID,

  5. confirm、return消息机制。
    答:
    以下两个机制都是在设置了之后才有效:
    confirm机制:在消息到达mq broker后,会给生产者一个应答;
    return消息机制:在消息无法被exchange、queue、routing key接收时,会在该处提示。

  6. 消息的ACK与重回队列。
    答:每一条消息在消费成功后,都会返回一个ack标志;而消费失败的会返回nack标志。
    在nack时,可以选择重回队列。
    ps:重回队列和消息限流注意数量的限制,如果限流为1个,则该队列会一直消费该消息,直到该消息成功。
    一般不建议使用重回队列。假如只有一条消息,该消息一直消费失败,则会造成死循环。

  7. 消息限流。
    消息限流,就是有大量的消息到消费者端,超出了消费者承受的能力,所以需要对消息数量进行限制,以便于消费者端正常的运行。
    rabbitMQ提供了qos(服务质量保证)功能,即在非自动确认(autoack=false)的前提下,如果一定数量的消息没有被消费,则不处理新的消息。

  8. TTL。
    答:Time-To-Live,也就是生存时间。
    设置该属性,则消息到期后,该消息会到死信队列中。

  9. 死信队列。
    答:当一个消息没有任何消费者消费时,该消息成为死信。
    进入死信队列的情况:
    1)消息被拒绝或者nack时,且requeue为false;
    2)消息TTL过期;
    3)队列达到最大长度(超过队列长度队首消息直接进入死信)。
    死信队列有自己的exchange,queue,routing key。和正常的队列是一样的。在定义正常的业务队列时,有一个参数arguments(类型为map),如下设置可以发送到死信队列:

//后面的参数为死信队列的exchange
 arguments.put("x-dead-letter-exchange","dlx.exchange");

死信队列的routing key一般设置为#。

上一篇下一篇

猜你喜欢

热点阅读