1、rabbitmq 的使用场景有哪些?

①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。

②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。

③. 应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依次获得消息处理,高峰时的大量订单可以积压在队列里慢慢处理掉。由于同步通常意味着阻塞,而大量线程的阻塞会降低计算机的性能。

④. 消息驱动的架构(EDA),系统分解为消息队列,和消息制造者和消息消费者,一个处理流程可以根据需要拆成多个阶段(Stage),阶段之间用队列连接起来,前一个阶段处理的结果放入队列,后一个阶段从队列中获取消息继续处理。

⑤. 应用需要更灵活的耦合方式,如发布订阅,比如可以指定路由规则。

⑥. 跨局域网,甚至跨城市的通讯(CDN行业),比如北京机房与广州机房的应用程序的通信

2、rabbitmq 有哪些重要的角色?

RabbitMQ 中重要的角色有:生产者、消费者和代理:

  • 生产者:消息的创建者,负责创建和推送数据到消息服务器;

  • 消费者:消息的接收方,用于处理数据和确认消息;

  • 代理:就是 RabbitMQ 本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。

3、 rabbitmq 有哪些重要的组件?

  • ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器,程序代码中使用。

  • Channel(信道):消息推送使用的通道。

  • Exchange(交换器):用于接受、分配消息。

  • Queue(队列):用于存储生产者的消息。

  • RoutingKey(路由键):用于把生成者的数据分配到交换器上。

  • BindingKey(绑定键):用于把交换器的消息绑定到队列上。

4、rabbitmq 中 vhost 的作用是什么?

vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中)。

5、rabbitmq 的消息是怎么发送的?

首先客户端必须连接到 RabbitMQ 服务器才能发布和消费消息,客户端和 rabbit server 之间会创建一个 tcp 连接,一旦 tcp 打开并通过了认证(认证就是你发送给 rabbit 服务器的用户名和密码),你的客户端和 RabbitMQ 就创建了一条 amqp 信道(channel),信道是创建在“真实” tcp 上的虚拟连接,amqp 命令都是通过信道发送出去的,每个信道都会有一个唯一的 id,不论是发布消息,订阅队列都是通过这个信道完成的。

6、rabbitmq 怎么保证消息的稳定性?

  • 提供了事务的功能。

  • 通过将 channel 设置为 confirm(确认)模式。

7、rabbitmq 怎么避免消息丢失?

  • 消息持久化

  • ACK确认机制

  • 设置集群镜像模式

  • 消息补偿机制

8、要保证消息持久化成功的条件有哪些?

  • 声明队列必须设置持久化 durable 设置为 true.

  • 消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。

  • 消息已经到达持久化交换器。

  • 消息已经到达持久化队列。

以上四个条件都满足才能保证消息持久化成功。

9、 rabbitmq 持久化有什么缺点?

持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。可尽量使用 ssd 硬盘来缓解吞吐量的问题。

10、rabbitmq 有几种广播类型?

三种广播模式:

  • fanout: 所有bind到此exchange的queue都可以接收消息(纯广播,绑定到RabbitMQ的接受者都能收到消息);

  • direct: 通过routingKey和exchange决定的那个唯一的queue可以接收消息;

  • topic:所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息;

11、 rabbitmq 怎么实现延迟消息队列?

  • 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能;

  • 使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能。

12、rabbitmq 集群有什么用? 集群主要有以下两个用途:

  • 高可用:某个服务器出现问题,整个 RabbitMQ 还可以继续使用;

  • 高容量:集群可以承载更多的消息量。

13、rabbitmq 节点的类型有哪些?

  • 磁盘节点:消息会存储到磁盘。

  • 内存节点:消息都存储在内存中,重启服务器消息丢失,性能高于磁盘类型。

14、rabbitmq 集群搭建需要注意哪些问题?

  • 各节点之间使用“--link”连接,此属性不能忽略。

  • 各节点使用的 erlang cookie 值必须相同,此值相当于“秘钥”的功能,用于各节点的认证。

  • 整个集群中必须包含一个磁盘节点。

15、rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

不是,原因有以下两个:

  • 存储空间的考虑:如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据;

  • 性能的考虑:如果每条消息都需要完整拷贝到每一个集群节点,那新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟。

16、rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

如果唯一磁盘的磁盘节点崩溃了,不能进行以下操作:

  • 不能创建队列

  • 不能创建交换器

  • 不能创建绑定

  • 不能添加用户

  • 不能更改权限

  • 不能添加和删除集群节点

唯一磁盘节点崩溃了,集群是可以保持运行的,但你不能更改任何东西。

17、 rabbitmq 对集群节点停止顺序有要求吗?

RabbitMQ 对集群的停止的顺序是有要求的,应该先关闭内存节点,最后再关闭磁盘节点。如果顺序恰好相反的话,可能会造成消息的丢失。

转载于:https://juejin.im/post/5cab2e0e6fb9a0687c53b254

RabbitMQ灵魂拷问相关推荐

  1. 字节跳动,三轮面试,四个小时,灵魂拷问,结局我哭了但下次还敢...

    写在开篇 去年的秋招对于我来说,那是非常的不顺利,所以今年的春招其实我也没有抱太大的希望,令我惊讶的是第一家给我面试机会的公司竟然是宇宙条.一开始接到面试通知时,心情特别复杂,紧张又兴奋,字节跳动是出 ...

  2. 灵魂拷问:你看过Xgboost原文吗?

    Datawhale 作者:小雨姑娘,Datawhale成员 事情的源头是这样的,某日我分享了一篇阿里机器学习工程师面试失败经历,其中提到了我回答关于Xgboost的部分,评论区的老哥就开始了灵魂拷问: ...

  3. 旷视唐文斌:你到底给谁创造了什么样的价值?AI产品灵魂拷问

    落地,是2019年AI行业的共同话题,创造价值.降本增效,成为行业共识. 作为AI头雁公司.也即将成为AI创业第一股的旷视,又是怎样看待落地这个话题的? 而作为一位技术领袖,旷视联合创始人兼CTO唐文 ...

  4. 旷视唐文斌:你到底给谁创造了什么样的价值?这是AI产品的灵魂拷问丨MEET2020...

    郭一璞 整理自 MEET2020智能未来大会  量子位 报道 | 公众号 QbitAI 落地,是2019年AI行业的共同话题,创造价值.降本增效,成为行业共识. 作为AI头雁公司.也即将成为AI创业第 ...

  5. 无惧灵魂拷问!淘宝扫一扫助你不再扔错垃圾!

    自7月1日上海正式实行垃圾分类开始 魔都人民天天经受着这样的灵魂拷问 你是什么垃圾? 面对有史以来最严的垃圾分类(个人扔错最高罚款200) 机智的魔都人民也是八仙过海,各显神通 面对这样的情况,此等情 ...

  6. 前端要懂mysql_【灵魂拷问】你真的懂得Mysql的管理和使用吗?

    作者 | Jeskson 来源 | 达达前端小酒馆 MySQL管理,数据库管理和数据表管理,用户管理. 初始化数据库,创建数据库,查看数据库,删除数据库. 创建数据表,查看数据表,修改数据表,删除数据 ...

  7. 其利断金前一句是什么_绍兴晚报丨裘亚黎说|围城外的灵魂拷问:人为什么要结婚?...

    裘亚黎说 "人为什么要结婚?" 在我们婚恋服务这行中,这样的困惑从未缺席.不缺钱.不缺玩伴.有房有车,我,为什么要找个人来添堵,有了孩子后很可能变成两个人添堵. 这算得上是一个灵魂 ...

  8. java 字符串赋值_灵魂拷问:为什么 Java 字符串是不可变的?

    在逛 programcreek 的时候,发现了一些精妙绝伦的主题.比如说:为什么 Java 字符串是不可变的?像这类灵魂拷问的主题,非常值得深思.对于绝大多数的初级程序员来说,往往停留在"知 ...

  9. 大规模集群故障处理,能抗住这3个灵魂拷问算你赢

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 我相信每一个集群管理员,在长期管理多个不同体量及应用场景的 ...

最新文章

  1. PPM图片格式及其C读写代码
  2. 图论 ---- F. The Shortest Statement (最短路的性质 + 任意两点间最短路 + 图转树)
  3. 易点租加速电脑租赁市场布局
  4. nodejs的安装for mac
  5. VMWare虚拟机与主机共享文件夹(如何安装VMWare tools)windows与windows共享
  6. 关于IO模式(浮空、推挽、开漏...)描述及应用
  7. python profile_python程序之profile分析
  8. 一行语句让你的浏览器变成记事本
  9. mysql 清理 reley_MySQL日志相关
  10. CentOS 8,凛冬将至
  11. php怎么写显示商品图片,php – Woocommerce显示带有产品图片的产品
  12. 什么是pdi检测_汽车pdi检测是什么?如何知道新车做没做pdi
  13. Spring 单元测试(Junit)
  14. 使用Spark core和SparkSQL的窗口函数分别实现分组取topN的操作
  15. Python数据处理之导入导出excel数据
  16. 深层网络梯度消失-爆炸原因
  17. 别在直接背3500个英语单词了,支你一招,看过来
  18. 即时通讯系统的消息到达率如何保障
  19. 欢迎回家,希尔顿集团全力迎接凯旋归来最美逆行者
  20. halcon基于形状的模板匹配第三例:rectify_result.hdev

热门文章

  1. 名帖260 文徵明 行书《杂咏诗卷-自作诗十首》
  2. Three.js--》实现3D汽车展厅效果展示
  3. sqlserver latch
  4. 什么是室内多芯分支光缆?室内多芯分支光缆技术规格参数介绍
  5. SEED随机种子详解
  6. 爱贝妈妈:孕期服务APP开发案例分析
  7. 【Node.js+koa--后端管理系统】设计动态发布、修改、查询、删除接口
  8. python自动化(二)前端基础:3.JavaScript基础
  9. 华纳云: 2021年十二个主要的云计算趋势
  10. 设置入校时间字段的有效性规则为_access字段有效性规则中怎么表示“入校时间必须为9月”?...