15、RabbitMQ

1、微服务之间是怎么交互的?

复制代码
1) 同步 使用OpenFeign 2、异步 使用MQ 需要获取返回值时只能用OpenFeign 

2、为什么要用MQ

复制代码
1)异步,可以提高页面响应速度 2)流量削峰填谷 3、解耦

3、详细说一下MQ是怎么用的?

复制代码
消息发送时使用 RabbitTemple的一个发送方法,消息消费者 方法上添加一个@RabbitListener(指定消费的队列) 注意,消息发送时发送到交换机中,然后再路由到队列中,路由时还设置可一个key

4、消息丢失怎么办(怎么防止消息丢失|怎么保证消息的可靠性?|使用MQ的时候有没有可能出现什么问题)

复制代码
发送方: 要开启确认机制,设置两个回调方法 一个是用来判断消息是否到达交换机 另一个是用来判断消息是否到达队列 MQ本身: 交换机、队列、消息都持久化到磁盘上 消费方:也需要开启确认机制,设置重试次数,重试次数到达上限后,会把消息转到一个专门存放错误消息的队列 

5、消息堆积怎么办?

复制代码
发送方瞬间并发量大、消费者效率低都会导致消息堆积 解决的方案:1、多加几个消费者 2、开启多线程 3、使用惰性队列(好处是消息直接放到磁盘)

6、怎么保证消息的幂等性?

复制代码
方案一:通用的 每一条消息都生成一个唯一的id,与消息一起投递给消费者。 消费者接收到消息后处理自己的业务,业务处理成功后将消息ID保存到Redis数据库 如果下次又收到相同消息,去Redis查询判断是否存在,存在则为重复消息放弃处理。 方案二: 结合着自己的业务 更新时:多带一个条件 新增时:先查询再新增

7、什么死信?(死信队列、死信交换机)

复制代码
消息超时未被消费的消息就成为了死信 应用场景:延迟消息

8、延迟消息怎么做?

复制代码
RabbitMQ提供一个专门用来做延迟消息的插件 创建交换机的时候需要声明是一个延迟交换机,发送消息时需要指定延迟的时间

9、在项目中你们使用的是MQ的哪种模式?

复制代码
direct topic 消息发送时携带了一个key到了交换机
相关推荐
Light6018 小时前
数据要素与数据知识产权交易中心建设专项方案——以领码 SPARK 融合平台为技术底座,构建可评估、可验证、可交易、可监管的数据要素工程体系
大数据·分布式·spark
21 小时前
TIDB——TIKV——raft
数据库·分布式·tidb
永亮同学1 天前
【探索实战】从零开始搭建Kurator分布式云原生平台:详细入门体验与功能实战分享!
分布式·云原生·交互
1 天前
TIDB——TIKV——读写与coprocessor
数据库·分布式·tidb·
1 天前
TIDB——PD(placement Driver)
java·数据库·分布式·tidb·
Alluxio1 天前
Alluxio正式登陆Oracle云市场,为AI工作负载提供TB级吞吐量与亚毫秒级延迟
人工智能·分布式·机器学习·缓存·ai·oracle
sinat_363954231 天前
canal-deployer1.1.8 + mysql + rabbitmq消息队列
mysql·rabbitmq
武子康1 天前
Java-204 RabbitMQ Connection/Channel 工作流程:AMQP 发布消费、抓包帧结构与常见坑
java·分布式·消息队列·rabbitmq·ruby·java-activemq
zhz52141 天前
代码之恋(第十五篇:分布式心跳与网络延迟)
网络·分布式·ai·重构·vue·结对编程
武子康1 天前
Java-205 RabbitMQ 工作模式实战:Work Queue 负载均衡 + fanout 发布订阅(手动ACK/QoS/临时队列)
java·性能优化·消息队列·系统架构·rabbitmq·java-rabbitmq·mq