【Java八股-第三十期】RabbitMQ - 中间件

提纲:

🔥RabbitMQ

  • 特点

  • 结构

  • Exchange类型

  • 工作流程

  • 重复消费问题

  • 消息的可靠传输

  • 消息的有序传输

  • 处理大量积压的消息

  • 高可用

一、RabbitMQ

1. 特点

  • 1、解耦:使用传统的服务间远程调用方式,需要在代码中直接调用其他模块,并且其他模块的不可用会导致整个业务流程不可用;而在消息队列中,调用者仅需要将消息放入消息队列,由调用的模块订阅这个队列并取出消息进行消费,不需要知道具体调用了什么模块,以及其他模块的健康状态

  • 2、异步:传统的远程调用方式,需要等待调用的模块全部执行完毕才能返回;在消息队列中,调用者可以将消息放入消息队列后直接返回结果,由消费者异步的处理消息

  • 3、削峰/限流:假设服务器最多能一次性处理 1k 请求,在少数的某一时刻(例如秒杀)请求突增到 100k,会导致服务器的崩溃,而如果将服务器的硬件资源强行提升,会造成资源浪费;使用消息队列,可以由生产者将消息发送到消息队列,由消息队列对服务器暂时无法处理的请求进行堆积,从而实现短时间内突发的大量请求的平滑处理

2.结构

  • 1、Publisher:消息生产者

  • 2、Consumer:消息消费者

  • 3、Broker:一个 MQ 服务节点

    • Queue:消息队列

    • Exchange:交换机,根据消息的 Routing Key 找到有对应 Binding Key 的消息队列进行消息转发

  • 4、Routing Key:消息的路由关键字

  • 5、Binding Key:队列与交换机绑定时声明

  • 6、Connection:Consumer、Publisher 与 Broker 之间建立的连接,例如 TCP 连接

  • 7、Channel:信道,一个 TCP 连接可以包含多个信道,以此来多路复用一个 TCP 连接,减少连接建立和销毁的开销,MQ 的通信都是在信道中完成的

  • 8、Virtual host:虚拟主机,将不同环境的 Exchange 进行隔离

3.Exchange 类型

  • 1、Fanout Exchange:将消息发送至所有与其进行绑定的队列当中

  • 2、Direct Exchange:将消息发送至 BindingKey 与 RoutingKey 完全匹配的队列当中,是一种单播模式

  • 3、Topic Exchange:类似于通配符匹配,由 '.' 将单词隔开,将消息发送至所有匹配的队列当中

4.工作流程

  • 1、预先准备

    • 在 Publisher 服务中声明一个交换机和交换队列

    • 通过 BindingKey 将交换队列绑定至交换机

  • 2、Publisher 发送消息

    • 使用 rabbitTemplate.

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

代码鹿のJAVA八股面试题总结 文章被收录于专栏

【📫专栏目录在最底部📫】 - 本专栏适合于JAVA已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了JAVA、Spring、计算机网路、操作系统、计算机网络、MySQL、算法与数据结构、中间件等一系列知识点,总结出了高频面试考点(附有答案),事半功倍,为大家春秋招助力。 - 本专栏内容分为五章

全部评论

相关推荐

醉蟀:你是我今年见过的最美牛客女孩
点赞 评论 收藏
分享
雪飒:我也遇见过,我反问他有考虑来华为od吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务