rabbitMQ相关问题总结

rabbitMQ相关问题总结,第1张

rabbitMQ相关问题总结

rabbitMQ相关问题总结
  • rabbitMQ相关问题
    • 消息队列的作用及使用场景
    • channel的作用是什么
    • 多个项目共用MQ服务器,怎么实现权限隔离
    • 消息有那些路由方式,及其它们的使用场景
    • 无法被路由的消息去了哪里
    • 消息在什么时候会变成死信
    • 如果一个项目要从那个服务器接收消息,怎么办
    • 如何一个项目要发送消息到多个服务器,怎么办
    • 如何实现延迟消息,例如订单15分钟自动关闭
    • 那些情况被造成消息丢失?怎么处理
    • 一个队列最多存储多少消息
    • 可以用队列的x-max-length实现消息限流例如处理秒杀场景么?
    • 如何提高消息的消费速率
    • AmqpTemplate和RabbitTemplate有什么区别
    • 如何动态的创建队列和消费者
    • Spring amqp中消息如何封装,怎么转换
    • 如何保证消息的顺序性
    • RabbitMQ集群节点类型,区别是什么
    • 如何保证RabbitMQ高可用
    • 大量消息堆积怎么办

rabbitMQ相关问题 消息队列的作用及使用场景

答:异步、解耦、消峰、广播(结合实际业务)

channel的作用是什么

答:多路复用思想,1.减少tcp长连接消耗,2.java的API里的重要编程接口,创建交换机、队列绑定,发送消息、创建消息都是在channel上实现的

多个项目共用MQ服务器,怎么实现权限隔离

答:创建vhost,为不同的业务系统创建不同的用户,给用户分配访问vhost的访问权限,实现权限隔离又提升硬件利用率

消息有那些路由方式,及其它们的使用场景

答:

  1. 直连dict:业务目的明确;
  2. 主题topic:规则灵活,邦定健可设置通配符;
  3. 广播fanout:通用类型,大家都需要,谁要就谁创建队列获取消息
无法被路由的消息去了哪里

答:3类情况

  1. 路由键错误、队列不存在、没有任何的配置–直接丢弃进入黑洞
  2. 交换机属性(alternate-exchange)备份的交换机属性,如果创建交换机时候指定了替补交换机,则由替补交换机绑定的队列后续的消费者去消费
  3. 回发,哪里来的回哪里去
消息在什么时候会变成死信

答:

  1. 消息过期,到达队列ttl、到达交换机ttl
  2. 超过队列长度(max length)
  3. 超过队列存储最大容量(max length bytes)
  4. 拒绝而且没有重回队列的消息
如果一个项目要从那个服务器接收消息,怎么办

答:定义多个template,因其由属性ConnectionFactory中就是服务牌的配置信息,定义多个template就可以指定连接不同且想要实现的服务器

如何一个项目要发送消息到多个服务器,怎么办

答:修改注入的RabbitListener注入中的ConnectionFactory即可发生到不同的服务器

如何实现延迟消息,例如订单15分钟自动关闭

答:设置过期时间,利用死信交换机到死信队列,被指定消费知消费(利用插件中type为x-delayed-message,消息头中指定延迟时间)

那些情况被造成消息丢失?怎么处理

答:

  1. AMQP,从生产者发消息到broker–设置服务器确认的不同模式
  2. 交换机到队列;–1、回发监听器;2、设置备份交换机处理
  3. 队列到消费者;–binding持久化,队列保障
  4. 消费者没有ack到队列;–1、自动ack;2、手动ack
一个队列最多存储多少消息

答:队列属性,max length和max length bytes控制队列存储消息的大小

可以用队列的x-max-length实现消息限流例如处理秒杀场景么?

答:不可以,因为存满后,后续消息进入队列后会将队列头的消息丢弃掉,不能实现消息限流的作用

如何提高消息的消费速率

答:增加消费者,消费者代码用多线程处理

AmqpTemplate和RabbitTemplate有什么区别

答:AmqpTemplate是sping对amqp的封装,RabbitTemplate是对AmqpTemplate的实现

如何动态的创建队列和消费者

答:RabbitTemplate中的接口createListenerContainer

Spring amqp中消息如何封装,怎么转换

答:利用序列化的工具(例如messageConverter)封装成Message的对象,在发消息时候会用序列化的工具对其序列化,消费者中反序列化的工具进行反序列化

如何保证消息的顺序性

答:一个队列指定一个消费者处理消息

RabbitMQ集群节点类型,区别是什么

答:

  1. 磁盘节点(原数据放在磁盘,应用提供读写)
  2. 内存节点(原数据放内存,备份数据)如果是持久化也会保存在磁盘
如何保证RabbitMQ高可用

答:Keepalived和HAProxy

大量消息堆积怎么办

答:

  1. 因为没有ack应答造成unack情况,让消费者处理掉队列头部的消息
  2. 因消费能力不足,则增加消费者

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5605095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存