- rabbitMQ相关问题
- 消息队列的作用及使用场景
- channel的作用是什么
- 多个项目共用MQ服务器,怎么实现权限隔离
- 消息有那些路由方式,及其它们的使用场景
- 无法被路由的消息去了哪里
- 消息在什么时候会变成死信
- 如果一个项目要从那个服务器接收消息,怎么办
- 如何一个项目要发送消息到多个服务器,怎么办
- 如何实现延迟消息,例如订单15分钟自动关闭
- 那些情况被造成消息丢失?怎么处理
- 一个队列最多存储多少消息
- 可以用队列的x-max-length实现消息限流例如处理秒杀场景么?
- 如何提高消息的消费速率
- AmqpTemplate和RabbitTemplate有什么区别
- 如何动态的创建队列和消费者
- Spring amqp中消息如何封装,怎么转换
- 如何保证消息的顺序性
- RabbitMQ集群节点类型,区别是什么
- 如何保证RabbitMQ高可用
- 大量消息堆积怎么办
答:异步、解耦、消峰、广播(结合实际业务)
channel的作用是什么答:多路复用思想,1.减少tcp长连接消耗,2.java的API里的重要编程接口,创建交换机、队列绑定,发送消息、创建消息都是在channel上实现的
多个项目共用MQ服务器,怎么实现权限隔离答:创建vhost,为不同的业务系统创建不同的用户,给用户分配访问vhost的访问权限,实现权限隔离又提升硬件利用率
消息有那些路由方式,及其它们的使用场景答:
- 直连dict:业务目的明确;
- 主题topic:规则灵活,邦定健可设置通配符;
- 广播fanout:通用类型,大家都需要,谁要就谁创建队列获取消息
答:3类情况
- 路由键错误、队列不存在、没有任何的配置–直接丢弃进入黑洞
- 交换机属性(alternate-exchange)备份的交换机属性,如果创建交换机时候指定了替补交换机,则由替补交换机绑定的队列后续的消费者去消费
- 回发,哪里来的回哪里去
答:
- 消息过期,到达队列ttl、到达交换机ttl
- 超过队列长度(max length)
- 超过队列存储最大容量(max length bytes)
- 拒绝而且没有重回队列的消息
答:定义多个template,因其由属性ConnectionFactory中就是服务牌的配置信息,定义多个template就可以指定连接不同且想要实现的服务器
如何一个项目要发送消息到多个服务器,怎么办答:修改注入的RabbitListener注入中的ConnectionFactory即可发生到不同的服务器
如何实现延迟消息,例如订单15分钟自动关闭答:设置过期时间,利用死信交换机到死信队列,被指定消费知消费(利用插件中type为x-delayed-message,消息头中指定延迟时间)
那些情况被造成消息丢失?怎么处理答:
- AMQP,从生产者发消息到broker–设置服务器确认的不同模式
- 交换机到队列;–1、回发监听器;2、设置备份交换机处理
- 队列到消费者;–binding持久化,队列保障
- 消费者没有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集群节点类型,区别是什么答:
- 磁盘节点(原数据放在磁盘,应用提供读写)
- 内存节点(原数据放内存,备份数据)如果是持久化也会保存在磁盘
答:Keepalived和HAProxy
大量消息堆积怎么办答:
- 因为没有ack应答造成unack情况,让消费者处理掉队列头部的消息
- 因消费能力不足,则增加消费者
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)